我試圖擴展一個類,然後使用基類中的方法,但是我看不到它。在派生類中看不到父級的方法
我的代碼:
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