簡體   English   中英

在C#中訪問繼承類的方法和屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM