如何在继承中访问选择性类方法?

时间:2017-03-02 12:16:20

标签: c# oop inheritance

我们有一个基类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()...

3 个答案:

答案 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课,它永远不需要知道AA的方法。它只知道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检查调用者并控制你的每个子类只调用自己的方法