關於繼承,隱藏和重載的一個小問題。繼承,隱藏和重載
我有以下類:
public class A
{
public BasicProject project { get; set; }
public int a {get; set;}
}
public class B : A
{
public AdvancedProject project { get; set; }
public int b {get; set;}
}
public class C : A
{
public new AdvancedProject project { get; set; }
public int c {get; set;}
}
public class BasicProject
{
public int p1 {get; set;}
public int p2 {get; set;}
}
public class AdvancedProject : BasicProject
{
public int p3 {get; set;}
public int p4 {get; set;}
}
另外我有一些功能
A show(A x)
{
x.project.p1;
x.project.p2;
x.project.p3;
x.project.p4;
}
的問題是,當我通過起作用B
型(或C
)的一個目的,所述x.project
指的是BasicProject
類型,而不是AdvancedProject
。
這是因爲該方法只知道'A'。如果你想訪問'B'屬性,你應該將其轉換爲'B'或使用泛型。 –
這是因爲在'A'中'project'不是虛擬的,如果是'你必須'在'B'中覆蓋它,那麼它仍然必須具有相同的類型。 – juharr
@juharr添加虛擬/覆蓋導致編譯錯誤「類型必須是'BasicProject'以匹配被覆蓋的」成員'A.project' – Ilan