我希望一个类中的特定方法只能由特定类访问。例如:
public class A
{
public void LimitedAccess() {}
public void FullAccess() {}
}
public class B
{
public void Func()
{
A a = new A();
a.LimitedAccess(); // want to be able to call this only from class B
}
}
public class C
{
public void Func()
{
A a = new A();
a.FullAccess(); // want to be able to call this method
a.LimitedAccess(); // but want this to fail compile
}
}
是否有可以用来强制执行此操作的关键字或属性?
更新:
由于现有系统的复杂性和时间限制,我需要一个低影响的解决方案。我想在编译时指出 LimitedAccess() 不能使用。我相信 Jon Skeet 的回答,即我所要求的完全不能在 C# 中完成。
这个问题和乔恩的回答对于以后可能遇到这个问题的人来说是很好的。这种设计气味的事实有望使任何人远离选择这样的东西作为所需的解决方案。
正如评论中提到的,如果您试图解决类似的情况, C# 朋友对话非常有用。
至于我的特殊解决方案:“为什么 A 会包含 B 的逻辑”(@sysexpand 在评论中询问)。这就是问题所在。 B.Func()
在我正在处理的整个系统中都被调用,但它主要在A
. 所以我最终做B
的就是Func()
搬进A
并A.LimitedAccess()
私有化。与往常一样,还有一些其他细节需要解决,但我得到了一个影响较小的解决方案,它给我的调用者带来了编译时错误A.LimitedAccess()
。
感谢您的讨论。