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

C# 在C中创建受限方法/字段#,c#,C#,这个问题类似于这个问题: 然而,我的问题是C 重申一下:我有两个类,比如Foo和Bar,它们是紧密耦合的Foo公开了一个我只想Bar访问的方法 我有点想知道我想要什么,但不知道如何真正做到这一点,也不知道是否存在一种更简单的方法。它将涉及使用某种依赖于使用(新StackFrame(1)).GetMethod().DeclaringType来拒绝访问的属性。用法如下所示: public class Foo { [RestrictedUsage(Allow=typeof(Bar))]

这个问题类似于这个问题:

然而,我的问题是C

重申一下:我有两个类,比如
Foo
Bar
,它们是紧密耦合的
Foo
公开了一个我只想
Bar
访问的方法

我有点想知道我想要什么,但不知道如何真正做到这一点,也不知道是否存在一种更简单的方法。它将涉及使用某种依赖于使用
(新StackFrame(1)).GetMethod().DeclaringType
来拒绝访问的属性。用法如下所示:

public class Foo {

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

}
对于这个问题,我可能遗漏了一些相关的细节(我是新来的)-我一定会在进行时更新它

更新: 我应该提到,
Foo
包装了一个现有的
UIElement
我试图修改的行为。由于类是密封的,所以很难正常修改它
Bar
是将值转换为正确值的类<代码>栏是非UI,在我的应用程序的其他位置使用
Foo
不知道如何转换值(它很复杂-这就是
Bar
的用途),这就是为什么我不能只包装基本方法

乔恩·斯基特给出了我期待的答案——改变课堂布局(到目前为止都要感谢他),但我认为这两个答案都不适用(好的答案只是不相关)

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

两个选项:

  • 将Foo和Bar放在一个单独的程序集中,并将Foo的方法设置为内部
  • 使Bar成为Foo中的嵌套类,并使方法私有
如果将Bar设置为嵌套类是合理的,则后者通常是更实用的选项


如果这两种方法都不起作用,我认为您最好只使用一个内部方法并对其进行记录-您对程序集中的其余代码有多不信任?

通常,我建议如下所示:

public abstract class Foo:UIElement{
    //...
}

public class Bar:UIElement{
    //...
    private class FooImpl:Foo
    {
        public int SomeMethod() 
        {
            // do something
        }
    }
} 

但是如果我们处理的是UIElements,那么我们可能也在处理XAML?像这样的类结构将很难在XAML中实例化Foo/FooImpl,因为您可能需要使用工厂模式…

我确实不信任代码,因为我不是唯一使用它的人。由于Foo也是一个UIElement,它自然也被引用到其他地方(排除了单独的程序集)。不是唯一使用它的人并不一定是不信任代码的原因。您的同事是否经常忽略记录在案的“请勿使用此”类型警告?而且,仅仅因为Foo在其他地方被引用并不意味着它不能在自己的程序集中…我最终嵌套了这个类。我重组了一些其他部分,新的结果是伟大的。谢谢