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

前端之家收集整理的这篇文章主要介绍了c# – 限制方法只能由特定的类调用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个类中的特定方法只能被特定的类访问.例如:
  1. public class A
  2. {
  3. public void LimitedAccess() {}
  4. public void FullAccess() {}
  5. }
  6.  
  7. public class B
  8. {
  9. public void Func()
  10. {
  11. A a = new A();
  12. a.LimitedAccess(); // want to be able to call this only from class B
  13. }
  14. }
  15.  
  16. public class C
  17. {
  18. public void Func()
  19. {
  20. A a = new A();
  21. a.FullAccess(); // want to be able to call this method
  22. a.LimitedAccess(); // but want this to fail compile
  23. }
  24. }

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

更新:

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

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

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

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

感谢讨论.

解决方法

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

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

猜你在找的C#相关文章