我试图扩展一个类,然后使用基类中的方法,但是我看不到它。在派生类中看不到父级的方法
我的代码:
class A {
protected void Foo(){}
}
class B : A {}
class C{
void Bar(){
B b = new B();
b.Foo();
}
}
我怎么能在C使用b.Foo?
我试图扩展一个类,然后使用基类中的方法,但是我看不到它。在派生类中看不到父级的方法
我的代码:
class A {
protected void Foo(){}
}
class B : A {}
class C{
void Bar(){
B b = new B();
b.Foo();
}
}
我怎么能在C使用b.Foo?
你不行。 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
}
}
在您的示例中不会出现“b.x();''产生错误? – CheeseSucker
那么,实际上我想用2个变量来扩展System.Windows.Shapes.Line。真正的代码: 公共类边缘:行 { <我的变量> 公共边缘(....) { .... }} 但是当我使用它,我可以即使他们公开,也不会看到它的方法或领域。 – gberes
你会想!但是这其实很好。同一类中的类的实例化具有这样的特权。 – ZacAttack
您必须公开方法Foo
。
class A {
public void Foo() {}
}
class B : A {}
class C {
void Bar(){
B b = new B();
b.Foo(); // Works
}
}
无论谁,为什么downvote? (已用+1加以抵消!) – Reddog
您需要用public
修改标记Foo
,而不是受保护的,因为C不继承B;它“使用”B.
您只能从子类中看到protected
方法。
C
不从B
继承,所以根据定义,它不能看到它的保护方法。
做成public
。 Foo()
只对A
及其派生类(如'B')可见。 C
不是派生类A
。
因为Foo被保护,所以除了派生类以外不能看到任何东西。
要揭露它,你需要做的:
class A
{
protected void Foo(){}
}
class B : A
{
public new void Foo()
{
base.Foo()
}
}
其他答案已经触及了这一点,但没有提到使用的新关键字的暴露具有相同名称的方法,但不同的辅助功能。
“C”从'A'继承吗?如果是这样,代码*仍然*不会编译。有关为什么的文章,请参阅http://blogs.msdn.com/b/ericlippert/archive/tags/protected/。 – dlev