我们有一个基类A,它由6个公共方法组成:
public class A
{
public void method1()
{
// Implementation
}
public void method2()
{
// Implementation
}
.
.
.
.
public void method6()
{
// Implementation
}
}
我们有两个继承自A的子类B和C.如何以B类只能访问method1(),method2(),method3()和C类访问方法4的方式实现它(),method5(),method6()...
答案 0 :(得分:15)
您无法阻止使用公共类A
方法,但您可以通过正确使用接口来隐藏它们。
interface IAOne
{
void method1();
void method2();
void method3();
}
interface IATwo
{
void method4();
void method5();
void method6();
}
class A : IAOne, IATwo
{
void method1() { }
void method2() { }
void method3() { }
void method4() { }
void method5() { }
void method6() { }
}
现在你有了B
课,它永远不需要知道A
或A
的方法。它只知道IAOne
接口。 B现在还可以重新公开任何方法(甚至重新实现接口),并将其实现委托给A
。
class B : IAOne
{
private IAOne _a;
public B(IAOne a) { _a = a; }
void method1() { _a.method1(); }
void method2() { _a.method2(); }
void method3() { _a.method3(); }
}
答案 1 :(得分:9)
你基本上不能那样做。您尝试这样做的事实应该警告您的代码有问题。
答案 2 :(得分:0)
我现在不知道你为什么要强调在所有6种方法中使用一个类(A),但如果你想得到它,你应该将编程设计和放置和拦截器放在方法的头上。然后你可以用MethodCallerInfo检查调用者并控制你的每个子类只调用自己的方法