Mein CTO (Chief Technical Officer) bat mich, einen Weg zu finden, wo er eine einzige Funktion in der Basisklasse schreiben und Zugriff auf alle Eigenschaften von die Kindklasse. Hier ist, was ich kam mit -Zugriff auf untergeordnete Klasseneigenschaften durch Funktion in der übergeordneten Klasse
Base Class
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;
}
}
Kinder Klasse
class House : Assets
{
public int rooms{get; set;}
}
Program.cs Datei
class Program
{
static void Main(string[] args)
{
House hsObj = new House();
hsObj.rooms = 5;
Assets asObj = hsObj.getPropertyVal(hsObj);
// Returns asObj as JSON
}
}
Nun funktioniert das gut, aber ich habe mich nur gefragt, ob es in C# einen besseren Weg dafür gibt.
Beachten Sie, dass wir nicht wissen, welche Eigenschaften in der untergeordneten Klasse vorhanden sein werden, so dass dies zur Laufzeit bestimmt werden muss.
UPDATE: machen deutlich,, ich habe mich nur gefragt, ob es einen besseren Weg, um die untergeordneten Klasse Eigenschaften zuzugreifen, eine ohne Reflexion verwendet wird. Der wichtige Punkt ist, dass wir keine Ahnung haben, welche Eigenschaften eine Kindklasse haben kann.
UPDATE # 2: Ich arbeite mit einem Produkt, das viele Einheiten hat. Diese Entitäten haben unterschiedliche Eigenschaften. Ich möchte mit all diesen Eigenschaften an einem einzigen Ort zugreifen und arbeiten können. Diese Funktion ist genau das. Es ist dieser eine Ort, von dem aus ich auf alle Daten zugreifen kann.
In Ihrem Beispiel erstellen Sie ein Objekt, rufen alle Eigenschaften des Objekts ab und legen dann dieselben Eigenschaften im Objekt fest. Es sieht so aus: 'var propValue = asObj.rooms; asObj.rooms = (int) propValue; '. Was genau willst du? Möchten Sie alle Eigenschaften einer untergeordneten Klasse in eine Basisklasse kopieren? –
@VyacheslavVolkov, ich habe mich nur gefragt, ob es eine bessere Möglichkeit gibt, auf die Eigenschaften der untergeordneten Klasse zuzugreifen, ohne Reflektion zu verwenden. –
Ich verstehe den Zweck nicht. In Ihrem Beispiel codieren Sie den Namen der untergeordneten Eigenschaft mit 'Console.WriteLine (hsObj.rooms);'. Sie können auch die Zeile "hsObj = (House) hsObj.getPropertyVal (hsObj);" ganz loswerden. Die Reflexion ist völlig verschwendet. Können Sie sich ein besseres Beispiel für das vorstellen, was Sie erreichen möchten? – Dan