C# 在C中创建受限方法/字段#
这个问题类似于这个问题: 然而,我的问题是C 重申一下:我有两个类,比如C# 在C中创建受限方法/字段#,c#,C#,这个问题类似于这个问题: 然而,我的问题是C 重申一下:我有两个类,比如Foo和Bar,它们是紧密耦合的Foo公开了一个我只想Bar访问的方法 我有点想知道我想要什么,但不知道如何真正做到这一点,也不知道是否存在一种更简单的方法。它将涉及使用某种依赖于使用(新StackFrame(1)).GetMethod().DeclaringType来拒绝访问的属性。用法如下所示: public class Foo { [RestrictedUsage(Allow=typeof(Bar))]
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中的嵌套类,并使方法私有
如果这两种方法都不起作用,我认为您最好只使用一个内部方法并对其进行记录-您对程序集中的其余代码有多不信任?通常,我建议如下所示:
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在其他地方被引用并不意味着它不能在自己的程序集中…我最终嵌套了这个类。我重组了一些其他部分,新的结果是伟大的。谢谢