キーワードはinternal
あなたが望むことをします。同じアセンブリ内からのアクセスのみを許可します( DLLまたはEXEを考えてください)。
ただし、さらに重要なのは、このタイプの機能が必要な理由を考える必要があることです。結合を回避することをお勧めします(2つのクラスが相互に依存しています)。オブジェクトAまたはBのコンストラクターに、データを共有できるようにする何かを渡すことはできますか?おそらく、AまたはBのいずれかにアクセサがあるプロパティですか?public
set
最良の選択である場合もありますがinternal
、ドライバーを使用して釘を打つことができるのと同じように、それがすべてに最適なアプローチになるわけではありません。internal
他のすべてのオプションが実行可能でない場合は、最後の手段として使用することをお勧めします。
キーワードが何に適しているかを理解するために、 C#内からのプラットフォーム呼び出し( pInvoke)Win32関数internal
について考えてみましょう。
[Flags]
internal enum ProcessAccessFlags : uint
{
None = 0x0,
VmOperation = 0x8,
VmRead = 0x10,
VmWrite = 0x20,
QueryInformation = 0x400
}
internal static class NativeMethods
{
[DllImport("kernel32")]
internal static extern IntPtr OpenProcess(ProcessAccessFlags desiredAccess,
bool inheritHandle,
int processId);
[DllImport("kernel32")]
internal static extern bool ReadProcessMemory(IntPtr hProcess,
IntPtr baseAddress,
byte[] buffer,
int count,
out int numberOfBytesRead);
[DllImport("kernel32")]
internal static extern bool WriteProcessMemory(IntPtr hProcess,
IntPtr baseAddress,
byte[] buffer,
int count,
out int numberOfBytesWritten);
[DllImport("kernel32")]
internal static extern int ResumeThread(IntPtr hThread);
[DllImport("kernel32")]
internal static extern bool CloseHandle(IntPtr handle);
}
internal
私のライブラリのさまざまなクラスがアクセスなどを必要とする可能性があるため、ここでキーワードは非常に意味がありますNativeMethods.CloseHandle()
。NativeMethods
ただし、クラスライブラリは厳密に内部実装の詳細のためのものであるため、クラスライブラリを使用する可能性のある人にクラスへのアクセスを許可したくありません。