加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:04:58 所属栏目:百科 来源:网络整理
导读:我想要一个类中的特定方法只能被特定的类访问.例如: 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 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可以放在不同的程序集中,并使有限访问作为内部方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读