C Sharpの「友人」キーワードに相当するものは何ですか?
-
22-07-2019 - |
質問
C Sharpの「友人」キーワードに相当するものは何ですか?
「内部」キーワードの使用方法
「internal」キーワードはC#の「friend」の代わりになることを読みました。
ソースコードがあるC#プロジェクトでDLLを使用していますが、既存のコードを変更したくありません。クラスを継承しており、継承したクラスを自由に使用できます。問題は、親クラスのほとんどのコードにメソッドが保護されていることです。友人を使用すると、これらの保護されたメソッドにアクセスしたり呼び出したりすることができるようになりますか?
解決
-
キーワードアクセス修飾子
internal を使用できます。 code>
を使用して、同じアセンブリ内のコードのみがアクセスできる型または型メンバーを宣言します。 -
を使用できます。
を使用して、同じアセンブリまたは指定されたアセンブリ内のコードのみがアクセスできる型として宣言します。で定義されているInternalsVisibleToAttribute
クラスSystem.Rutime.CompilerServices
他のアクセス修飾子などを使用するときは、最初のものを使用します private
として。機知に:
internal class MyClass {
...
}
次のように2番目を使用します:
[assembly:InternalsVisibleTo("MyFriendAssembly", PublicKey="...")]
internal class MyVisibleClass {
...
}
これらはどちらも、C#の friend
に相当するものと見なすことができます。
protected
のメソッドは派生クラスで既に利用可能です。
他のヒント
いいえ、「内部」は「友人」とは異なります。 (少なくともC ++の「友人」)
friendは、このクラスが1つの特定のクラスのみによってアクセス可能であることを指定します。
internalは、このクラスがアセンブリ内のどのクラスからもアクセス可能であることを指定します。
1) 内部 は、ご想像のとおり、VB.NETの「friend」キーワードと同等のC#です(置換ではなく)
2)使用法は次のとおりです
internal void Function() {}
internal Class Classname() {}
internal int myInt;
internal int MyProperty { get; set; }
3)基本的に、内部としてマークされたクラス/関数/変数/プロパティのアクセシビリティは、それがコンパイルされているアセンブリに対してパブリックであり、他のアセンブリに対してプライベートであるかのように規定するアクセス修飾子です
サブクラスは、継承したクラスの保護されたメンバーにアクセスできます。
これらの保護されたメンバーへのアクセスを別のクラスに許可しようとしていますか?
Internalはfriendと同等です。保護されたメソッドは、同じクラス内または継承者からのみ使用できます。継承者から保護されたメソッドを公開しようとしている場合、それらをパブリックメソッドでラップできます。