在派生类中看不到父类的方法

时间:2011-10-12 21:47:19

标签: c# derived-class

我正在尝试扩展一个类,然后使用基类中的方法,但我看不到它。

我的代码:

class A {
    protected void Foo(){}
}

class B : A {}

class C{
    void Bar(){
         B b = new B();
         b.Foo();
    }
}

我如何在C中使用b.Foo?

6 个答案:

答案 0 :(得分:1)

您只能在后代类中看到protected方法。

C不会从B继承,因此,根据定义,它无法看到其受保护的方法。

答案 1 :(得分:1)

你做不到。 Foo是A类的受保护成员函数,因此只能在A类中使用,或者从继承自它的类中使用。

class A 
{
   protected int x() {}
}

class B : A 
{
   void F() 
   {
      A a = new A();  
      B b = new B();  
      a.x();   // Error
      b.x();   // OK
   }
}

答案 2 :(得分:0)

您必须公开方法Foo

class A {
    public void Foo() {}
}

class B : A {}

class C {
    void Bar(){
         B b = new B();
         b.Foo(); // Works
    }
}

答案 3 :(得分:0)

您需要使用Foo修饰符标记public而不是保护,因为C不会继承B;它“使用”B。

请参阅here for more information

答案 4 :(得分:0)

将其设为publicFoo()仅对A及其派生类(如“B”)可见。 C不是A的派生类。

答案 5 :(得分:0)

因为Foo受到保护,所以除了派生类之外不能看到它。

要公开它,您需要这样做:

class A 
{
    protected void Foo(){}
}

class B : A 
{
    public new void Foo()
    {
        base.Foo()
    }
}

其他答案已经触及了这一点,但没有提到使用 new 关键字来公开具有相同名称但具有不同可访问性的方法。