在C#中创建受限制的方法/字段

Ant*_*ger 2 c#

这个问题与此类似: 在C++中限制对特定类的方法访问

但是,我的问题是C#.

重申:我有两个类,比如说FooBar紧密耦合.Foo公开了一个我只想要Bar访问的方法.

我有点想知道我想要什么,但不知道如何实际做到这一点,或者知道是否存在更简单的方法.它将涉及使用某种依赖于(new StackFrame(1)).GetMethod().DeclaringType拒绝访问的属性.用法看起来像这样:

public class Foo {

    [RestrictedUsage(Allow=typeof(Bar))]
    public int SomeMethod() 
    {
        // do something
    }

}
Run Code Online (Sandbox Code Playgroud)

我可能缺少相关的细节问题(我是新来的) - 我一定会在我去的时候更新它.

更新: 我应该提一下,Foo包装一个现有UIElement的我试图修改的行为.由于课程是密封的,因此很难正常修改.Bar是将值转换为正确值的类.Bar是非UI,并在我的应用程序中的其他地方使用.Foo不知道如何转换价值(它很复杂 - 这就是Bar为什么),这就是为什么我不能只包装基本方法.

Jon Skeet给出了我期待的答案 - 改变课程的布局(感谢他到目前为止),但我认为任何一个答案都不适用(好的答案只是不相关).

我已经在代码中犯了错误,引用了错误的属性......

Jon*_*eet 6

两种选择:

  • 将Foo和Bar放在一个单独的程序集中,并使Foo的方法在内部
  • 使Bar成为Foo中的嵌套类,并将该方法设为私有

后者通常是更实用的选项,如果使Bar成为嵌套类是合理的.

如果这些都不起作用,我认为你最好只使用内部方法并记录它 - 你对组装中的其余代码有多少不信任?