21

Cシャープの「友達」キーワードに相当するものは何ですか?

「内部」キーワードはどのように使用しますか?

「internal」キーワードは C# の「friend」の代わりであると読みました。

ソース コードがある C# プロジェクトで DLL を使用していますが、既存のコードを変更したくありません。私はクラスを継承しており、継承したクラスを好きなように使用できます。問題は、親クラスのほとんどのコードに保護されたメソッドがあることです。フレンドを使用すると、これらの保護されたメソッドにアクセスしたり呼び出したりできるようになりますか?

4

7 に答える 7

35
  1. キーワード アクセス修飾子を使用internalして、同じアセンブリ内のコードのみがアクセスできる型または型メンバーを宣言できます。

  2. InternalsVisibleToAttributeで定義されたクラスを使用しSystem.Rutime.CompilerServicesて、同じアセンブリまたは指定されたアセンブリのみのコードにアクセスできる型を宣言できます。

などの他のアクセス修飾子を使用する場合は、最初のものを使用しますprivate。ウィット:

internal class MyClass {
    ...
}

2 番目は次のように使用します。

[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")]
internal class MyVisibleClass {
    ...
}

これらはどちらもfriendC# と同等と考えることができます。

protected派生クラスで既に使用可能なメソッド。

于 2009-01-15T03:15:18.600 に答える
33

いいえ、「内部」は「友達」と同じではありません(少なくともC ++の「友達」)

friendは、このクラスにアクセスできるのは1つの特定のクラスのみであることを指定します。
internalは、このクラスがアセンブリ内の任意のクラスからアクセス可能であることを指定します。

于 2010-11-13T17:00:18.207 に答える
6
  1. internalfriendご想像のとおり、VB.NETキーワードに相当する C# です(置換ではなく)。

  2. 使い方は以下の通り

    internal void Function() {}
    internal Class Classname() {}
    internal int myInt;
    internal int MyProperty { get; set; }
    
  3. 基本的に、内部としてマークされたクラス/関数/変数/プロパティのアクセシビリティが、コンパイルされているアセンブリに対してパブリックであり、他のアセンブリに対してプライベートであるかのように規定するアクセス修飾子です。

于 2009-01-15T03:07:40.813 に答える
1

サブクラスは、継承したクラスの保護されたメンバーにアクセスできます。

これらの保護されたメンバーへのアクセスを別のクラスに付与しようとしていますか?

于 2009-01-15T03:08:43.790 に答える
0

内部は友人に相当します。保護されたメソッドは、同じクラス内または継承者からのみ使用できます。保護されたメソッドを継承者から公開しようとしている場合は、それらをパブリック メソッドでラップできます。

于 2009-01-15T03:07:48.723 に答える