簡體   English   中英

如何從子類C#的實例訪問基類屬性

[英]How to access a base class property from instance of child class C#

我有以下代碼:

public Abstract class BaseClass
{
    public int BaseProperty {get; set;} 
}

public class ChildClass : BaseClass 
{
    public int ChildProperty {get; set;}
}

public class test 
{
    public test()
    {
        ChildObject = new ChildClass ();
    }

    public ChildClass ChildObject  {get; set;}
}

在類test我想訪問基類的屬性BasePropertyChildObject.BaseProperty不起作用,如果可以,

int num = (ChildObject as BaseClass).BaseProperty ; 

發生轉換錯誤。

任何想法?

只需使用b.P1 (為方便起見,這里是一個DotNetFiddle ,因為我是為了方便。)

這樣想: BA繼承。 因此,即使從技術上講P1A的屬性, B也具有該屬性,因為它繼承自A 您始終可以將B的實例視為A的實例。

旁注-我已經注意到,如果我們避免使用諸如ABBaseClassInheritedClass等之類A名稱,那么問題和答案都更易於閱讀。

因此,這是使用更多詳細示例的相同解釋。 “汽車”已被嚴重使用,但我還是要使用它。

public class Vehicle
{
    public int NumberOfDoors {get;set;}
}

public class Truck : Vehicle
{
    public int NumberOfCountryMusicianEndorsements {get;set;}
}

如果您創建新的Truck實例

var truck = new Truck();

您可以將其投射為Vehicle

var vehicle = (truck);
var numberOfDoors = vehicle.NumberOfDoors;

但是您不需要,因為vehicle已經是Vehicle因為Truck繼承自Vehicle 因此, Truck具有與Vehicle相同的屬性以及其自身的屬性。

var numberOfDoors = truck.NumberOfDoors;

甚至還有一個花哨的術語-它被稱為Liskov替代原理。 簡而言之,這意味着如果Truck繼承自Vehicle那么您應該始終能夠將Truck用作Vehicle 您始終可以將繼承的類替換為其任何基類。 (並非總是如此。有時候你做不到。這意味着某人做錯了。該原則意味着你應該總是能夠做。)

我認為您有一個可變的拼寫錯誤,在A中您使用大寫字母定義P1 ,在B中您使用小寫字母定義p2 ,在命名和訪問b.p1要保持一致

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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