internal
关键字会做你想做的事。它只允许从同一个程序集中访问(想想DLL或EXE)。
然而,更重要的是,您应该考虑为什么需要这种类型的功能。最好的做法是避免耦合(两个类相互依赖)。可以在对象A或B的构造函数中传递允许它们共享数据的东西吗?也许是在A或B上有访问器的属性?public
set
在某些情况下,internal
最好的选择是,但就像螺丝刀可以用来敲钉子一样,它并不是所有事情的最佳方法。internal
如果其他所有选项都不可行,我建议您将其用作最后的手段。
为了让您了解internal
关键字的用途,让我们考虑从C#中调用平台 ( pInvoke ) Win32 函数:
[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
该类,因为它严格用于底层实现细节。