Hallo,
ich weiß leider nicht, nach welchem Begriff ich suchen muss und ob dies überhaupt so geht:
es gibt z. B. folgende Klasse:
public class Kunde
{
public String Kundenname = "";
public Int Kundennummer { get; set; }
}
Jetzt möchte ich zu den Klassenmembern weitere Eigenschaften (z. B. Wert1 und Wert2) definieren, um dann so darauf zuzugreifen:
Kunde.Kundenname.Wert1 = "Hallo"
Kunde.Kundenname.Wert2 = 12
Kunde.Kundenname = "Michael" // trotzdem kann direkt weiterhin auf Kundenname zugegriffen werden
Kunde.Kundennummer.Wert1 = "Test"
Kunde.Kundennummer.Wert2 = 14
Kunde.Kundennummer = 10
In der Definition möchte ich es relativ einfach haben, etwa so:
public class Kunde
{
ExtendAll
{
public String Wert1 = "";
public Int Wert2 = 0;
}
public String Kundenname = "";
public Int Kundennummer { get; set; }
}
Das klappt natürlich nicht. Jedoch sollten alle im forall-Teil angegebenen Dinge für jedes Klassenmember einzeln verfügbar sein.
Jetzt bin ich gespannt 🤔
Vielen Dank!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Du mußt dir deinen eigenen Datentyp erstellen, siehe :rtfm:, 🛈 oder 📗
Weeks of programming can save you hours of planning
Hi,
ich würde das wahrscheinlich so machen:
class Eigenschaft<T>
{
public T Value;
public String Wert1;
public int Wert2;
}
Funktioniert zwar nicht ganz so, wie du willst, aber es funktioniert.
Hallo m.grauber,
wenn Kundenname
und Kundennummer
keine einfachen Datentypen, sondern Klassen sind, die die Eigenschaften Wert1
und Wert2
enthalten, ist das möglich. Du solltest dabei allerdings das Gesetzt von Demeter beachten.
Edit: Bitte beachte vorsorglich [Hinweis] Wie poste ich richtig? Punkt 1.1.1!
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo m0rius, userid16184, MrSparkle,
vielen Dank für die schnelle Hilfe! Jedoch kann ich den Datentyp nicht so einfach ändern:
Kundenname und Kundennummer sind vom Entity Framework vorgegeben und können leider nur erweitert werden (mit partial). Ich kann leider den Datentyp nicht ändern und will nur in einer partiellen Klasse die "Untermember" für jeden Member der Klasse anhängen.
Ich möchte sowohl bei Kundenname als auch bei Kundennumer und evtl. noch vielen weiteren Eigenschaften jeweils getrennt Wert1 und Wert2 hinterlegen können, d. h. in Kunde.Kundenname.Wert1 kann etwas anderes enthalten als Kunde.Kundennummer.Wert1.
Ich hoffe, das ist irgendwie machbar.
Vielen Dank!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]
Da du den Datentyp nicht ändern kannst, wirst du eigene Membervariablen deklarieren müssen.
Du könntest dir ein 'enum' definieren (je Eigenschaft) und dann ein Dictionary<MyEnum, MyClass> erzeugen, um die zusätzlichen Eigenschaften aufzunehmen.
Und evtl. sogar den Indexer der Klasse benutzen:
enum MyEnum { Kundenname, Kundennummer }
class MyClass
{
public string Wert1;
public int Wert2;
}
Dictionary<MyEnum, MyClass> myDict = new Dictionary<MyEnum, MyClass>();
MyClass this[MyEnum e]
{
get { return myDict[e]; }
set { myDict[e] = value; }
}
// Aufruf dann z.B. so
Kunde[MyEnum.Kundenname].Wert1 = "Test";
Kunde[MyEnum.Kundennummer].Wert2 = 42;
Evtl. könnte man es auch mit "Aspektorientierter Programmierung" so hinkriegen, kenne mich selber aber nicht damit aus 😭
Hallo m.grauber,
mit . kannst du nur auf die Member des Typs zu greifen.
Wenn du Kunde.Kundennummer.Wert1 schreiben willst, muss der Typ, von dem Kunde.Kundennummer ist, ein Member Namens Wert1 haben.
Wenn der Typ aber String oder int ist, gibt es kein Member Wert1.
Das gehört, wie m0rius schon angedeutet hat, aber zu den absoluten Grundlagen.
herbivore
PS: Mit C# 3.0 gibt es zwar Erweiterungsmethoden, aber keine Erweiterungsproperties.
Hallo Cat und Herbivore,
Danke für Eure Hilfe! War leider etwas unterwegs und habe danach zuersteinmal viel getestet:
Das es nicht direkt geht, ist gut zu wissen - Ich hatte mich schon "Wund" gesucht.
Den Workaround über den Indexer und das Dictionary ist wirklich sehr intelligent und gefällt mir sehr gut! 👍
Vielen Dank!!!!
Mfg
Michael
PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!
:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]