[英]Accessing Methods and Properties of an Inherited Class in C#
假設我有一個像這樣的基類和派生類
class Student {
public string Name { get; set; }
public int RollID { get; set; }
public void GetPaint() { }
}
class Person : Student {
public string Address { get; set; }
public void GetGun() { }
}
class Content {
public void method(Student student) {
Student _student = student;
Person _person = (Person)student;
}
}
class Client
{
static void Main()
{
new Content().method(new Person() { Name="foo",RollID=1});
}
}
現在,在此代碼中,當Debug並將鼠標懸停在Content Class中的Method參數上時,我可以看到Student和Person類的所有屬性。
但是當我嘗試訪問該方法時,我只能訪問Student類的方法。 為了訪問類Person的方法,我必須將其強制轉換為Person。 我的問題是,我如何能夠查看和檢索Student類的屬性值,該類是Person類的派生類。 為什么我能看到不屬於學生類的財產的價值? 以及為什么我無法訪問方法。 請解釋一下,是否缺少一些概念?
為什么我可以查看不屬於
Student
類的屬性的值?
因為調試器會查看對象的實際類型(在這種情況下為Person
)以及與該類型關聯的所有屬性等。
為什么我無法使用方法?
由於該變量的類型為Student
,因此您只能訪問Student
的成員。 如果要訪問其他類型的成員(例如Person
),則必須進行強制轉換以告知編譯器“對該引用進行處理,就好像它引用了Person
”。 如果Student
在運行時不是一個真正的Person
,您將得到一個例外。
您的繼承權被翻轉了。 只需按以下步驟更改您的課程:
class Person {
public string Address { get; set; }
public void GetGun() { }
}
class Student : Person {
public string Name { get; set; }
public int RollID { get; set; }
public void GetPaint() { }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.