这个问题类似于这个问题: Restrict method access to a specific class in C++
但是,我的问题是C#。
重申一下:我有两个课程,比如Foo
和Bar
紧密耦合。 Foo
公开了一种我只希望Bar
可以访问的方法。
我有点想知道我想要什么,但不知道如何实际做到这一点,或者知道是否存在更简单的方法。它将涉及使用依赖于使用(new StackFrame(1)).GetMethod().DeclaringType
拒绝访问的某种属性。用法看起来像这样:
public class Foo {
[RestrictedUsage(Allow=typeof(Bar))]
public int SomeMethod()
{
// do something
}
}
我可能缺少这个问题的相关细节(我是新来的) - 我一定会在我去的时候更新它。
更新
我应该提到Foo
包裹了我试图修改的现有UIElement
行为。由于课程是密封的,因此很难正常修改。 Bar
是将值转换为正确值的类。 Bar
是非UI,用于我的应用程序中的其他位置。 Foo
不知道如何转换值(它很复杂 - 这就是Bar
的用途),这就是为什么我不能只包装基本方法。
我已经在代码中犯了错误,引用了错误的属性......
答案 0 :(得分:6)
两个选项:
后者通常是更实用的选择,如果使Bar成为嵌套类是合理的。
如果这些都不起作用,我认为你最好只使用内部方法并记录它 - 你对组装中的其余代码有多少不信任?
答案 1 :(得分:0)
通常我建议如下:
public abstract class Foo:UIElement{
//...
}
public class Bar:UIElement{
//...
private class FooImpl:Foo
{
public int SomeMethod()
{
// do something
}
}
}
但如果我们处理UIElements,那么我们可能还在处理XAML?像这样的类结构会很难在XAML中实例化Foo / FooImpl,因为你可能需要使用工厂模式...