Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

[erledigt] Kann man in C# mehrere Eigenschaften zu Eigenschaften bzw. hinzufügen?
m.grauber
myCSharp.de - Member



Dabei seit:
Beiträge: 345

Themenstarter:

[erledigt] Kann man in C# mehrere Eigenschaften zu Eigenschaften bzw. hinzufügen?

beantworten | zitieren | melden

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!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von m.grauber am .
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 :]
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5973
Herkunft: Leipzig

beantworten | zitieren | melden

Du mußt dir deinen eigenen Datentyp erstellen, siehe :rtfm:, oder
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
userid16184
myCSharp.de - Member



Dabei seit:
Beiträge: 50

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von m0rius am .
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
m.grauber
myCSharp.de - Member



Dabei seit:
Beiträge: 345

Themenstarter:

beantworten | zitieren | melden

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 :]
private Nachricht | Beiträge des Benutzers
Cat
myCSharp.de - Member

Avatar #avatar-3070.jpg


Dabei seit:
Beiträge: 790

beantworten | zitieren | melden

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 ;-(
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
m.grauber
myCSharp.de - Member



Dabei seit:
Beiträge: 345

Themenstarter:

beantworten | zitieren | melden

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 :]
private Nachricht | Beiträge des Benutzers