[英]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
我想訪問基類的屬性BaseProperty
, ChildObject.BaseProperty
不起作用,如果可以,
int num = (ChildObject as BaseClass).BaseProperty ;
發生轉換錯誤。
任何想法?
只需使用b.P1
。 (為方便起見,這里是一個DotNetFiddle ,因為我是為了方便。)
這樣想: B
從A
繼承。 因此,即使從技術上講P1
是A
的屬性, B
也具有該屬性,因為它繼承自A
您始終可以將B
的實例視為A
的實例。
旁注-我已經注意到,如果我們避免使用諸如A
, B
, BaseClass
, InheritedClass
等之類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.