我的CTO(首席技術官)要求我想出一種方法,他可以在基類中編寫一個函數,並且可以訪問所有屬性孩子班。以下是我想出了 -通過父類中的函數訪問子類屬性
基類
class Assets
{
public Assets getPropertyVal(Assets asObj)
{
PropertyInfo[] propInfos = asObj.GetType().GetProperties();
string strAttributeValue = "10";
foreach (PropertyInfo propInfo in propInfos)
{
// Getting the value
var propValue = propInfo.GetValue(asObj, null);
// Setting the value
propInfo.SetValue(asObj, Convert.ChangeType(strAttributeValue, propInfo.PropertyType), null);
}
return asObj;
}
}
子類
class House : Assets
{
public int rooms{get; set;}
}
Program.cs的文件
class Program
{
static void Main(string[] args)
{
House hsObj = new House();
hsObj.rooms = 5;
Assets asObj = hsObj.getPropertyVal(hsObj);
// Returns asObj as JSON
}
}
現在這工作正常,但我只是想知道是否有更好的方式在C#中執行此操作。
請注意,我們不知道什麼屬性會出現在子類中,所以這將不得不在運行時確定。
UPDATE:這就很清楚,我只是想知道是否有更好的方式來訪問子類的屬性,一個沒有使用反射。重要的一點是,我們不知道兒童班可能擁有什麼樣的特性。
UPDATE#2:我正在使用一個有許多實體的產品。這些實體具有不同的屬性。我希望能夠在一個地方訪問和使用所有這些屬性。這個功能就是這樣。這就是我可以訪問所有數據的一個地方。
在您的示例中,您將創建一個對象並獲取該對象的所有屬性,然後在該對象中設置相同的屬性。它看起來像這樣:var propValue = asObj.rooms; asObj.rooms =(int)propValue;'。你想要什麼?你是否想要將所有屬性從子類複製到基類? –
@VyacheslavVolkov,我只是想知道是否有更好的方式來訪問子類的屬性而不使用反射。 –
我不明白這個的目的。在你的例子中,你用'Console.WriteLine(hsObj.rooms);'硬編碼子屬性名稱。你也可以完全擺脫'hsObj =(House)hsObj.getPropertyVal(hsObj);'行。反射被完全浪費了。你能想出一個你想要完成的更好的例子嗎? – Dan