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

Sri*_*m M 5 c# oop inheritance

我们有一个基类A,它由6个公共方法组成:

public class A
{ 
 public void method1()
 {
  // Implementation
 }

 public void method2()
 {
   // Implementation
 }
 .
 . 
 .
 .
 public void method6()
 {
  // Implementation
 }
}
Run Code Online (Sandbox Code Playgroud)

我们有两个继承自A的子类B和C.如何实现它,使B类只能访问method1(),method2(),method3(),而C类可以访问method4(), method5(),method6()?

cae*_*say 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() { }
}
Run Code Online (Sandbox Code Playgroud)

所以现在你有了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(); }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的解决方案:明智地使用接口和组合而不是继承. (2认同)

Con*_*ell 9

你基本上不能这样做.您尝试这样做的事实应该是警告您的代码有问题.