我有一個人類簡單的兩個屬性年齡和名稱。然後,我有另一個類女派生自人類類,它有一個額外的屬性FavCream。現在,我有這些類的兩個不同的實例說H1和W1(派生類的女人)和I(基類人的)只是想覆蓋與的W1所有派生屬性相應的值從h1。如何重寫派生類繼承的屬性值與基類實例
但是,我沒有發現這個內置的。我不喜歡在Woman類中創建一個手動完成作業的公共方法。我認爲,我可以使用反射功能創建一個實用功能,但要尋找經過驗證的方法來處理這個問題。
這是不可能的嗎?在這種情況下,我們不能有任何繼承優勢嗎?或者這是不合邏輯的?
請耐心等待我。謝謝!
class Program
{
private static Woman _aWoman;
static void Main(string[] args)
{
var aHuman = new Human() { Age = 25, Name = "Ram" };
Program._aWoman = new Woman() { Age = 22, FavCream = "Ponds" , Name = "Sita"};
Console.WriteLine("Woman is " + Program._aWoman.ToString()); // prints Age = 22 Name = Sita FavCream = Ponds
Console.WriteLine("Human is " + aHuman.ToString()); // prints Age = 25 Name = Ram
**// Do something here so woman derived property has auto over written with property of human instance.**
Console.WriteLine("after overwriting, woman is " + _aWoman.ToString());
// The result I m looking for here is "Age = 25 Name = Ram FavCream = Ponds"
}
}
internal class Human
{
public int Age { get; set; }
public string Name { get; set; }
public override string ToString()
{
return "Age = " + this.Age + " Name = " + this.Name;
}
}
internal class Woman: Human
{
public string FavCream { get; set; }
public override string ToString()
{
return base.ToString() + " FavCream = " + this.FavCream;
}
}
UPDATE: 我關於創建方法結束,並且使用反射拷貝的基類的屬性。此外,我試圖用通用限制來增強這一點,但還沒有成功。
感謝大家這樣的快速回復。
// Trying to make it generic... but could not enforce contraint that T must be base class of 'this'
public void Overwrite<T>(T baseInstance) where T : Human
{
Type baseType = baseInstance.GetType();
Type derivedType = this.GetType();
PropertyInfo[] propInfos = null;
propInfos = baseType.GetProperties();
foreach (PropertyInfo eachProp in propInfos)
{
PropertyInfo baseProp = (baseType).GetProperty(eachProp.Name);
object baseVal = baseProp.GetValue(baseInstance, null);
eachProp.SetValue(this, baseVal, null);
}
}
什麼,如果你有兩個實例人類h1和h2?你想從哪裏得到屬性? –