c# – 限制方法只能由特定的类调用

前端之家收集整理的这篇文章主要介绍了c# – 限制方法只能由特定的类调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个类中的特定方法只能被特定的类访问.例如:
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
  }
}

是否有一个关键字或属性可以用来强制执行此操作?

更新:

由于现有的系统复杂性和时间限制,我需要一个低影响的解决方案.而且我希望在编译时指出有限访问()不能被使用.我相信Jon Skeet的答案,正是我所要求的,在C#中是无法做到的.

问题和乔恩的答案对那些可能会在后面遇到的人有好处.事实上,这种设计闻起来可以希望可以让任何人离开,选择这样的东西作为所需的解决方案.

评论中所提到的,如果您正在尝试解决类似的情况,那么C# friend会话就很有用.

对于我的具体解决方案:“为什么A包含B的逻辑”(@sysexpand在评论中提出).那是擦B.Func()在整个系统中被调用,但它主要是在一个单一的A.所以我最后做的是将B的Func()移动到A中,并使A.LimitedAccess()私有.还有一些其他的细节可以解决,因为一直有,但是我有一个低影响的解决方案,给我的编译时错误的呼叫者到A.LimitedAccess().

感谢讨论.

解决方法

不,唯一可以做的是将限制访问作为私有方法,并将类B嵌套在类A内.

(我假设你想要在同一个程序集中的所有类,否则你可以将A和B放在同一个程序集中,C可以放在不同的程序集中,并使有限访问作为内部方法.

猜你在找的C#相关文章