我正在尝试扩展一个类,然后使用基类中的方法,但我看不到它。
我的代码:
class A {
protected void Foo(){}
}
class B : A {}
class C{
void Bar(){
B b = new B();
b.Foo();
}
}
我如何在C中使用b.Foo?
答案 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。
答案 4 :(得分:0)
将其设为public
。 Foo()
仅对A
及其派生类(如“B”)可见。 C
不是A
的派生类。
答案 5 :(得分:0)
因为Foo受到保护,所以除了派生类之外不能看到它。
要公开它,您需要这样做:
class A
{
protected void Foo(){}
}
class B : A
{
public new void Foo()
{
base.Foo()
}
}
其他答案已经触及了这一点,但没有提到使用 new 关键字来公开具有相同名称但具有不同可访问性的方法。