Entwickler-Ecke
C# - Die Sprache - Klasse mit unterschiedlichen Eigenschaften
Lukas1983 - Do 09.07.09 00:03
Titel: Klasse mit unterschiedlichen Eigenschaften
Hallo!
ich bin neu hier und auch kein erfahrener Programmierer!
Ich möchte eine verschachelte klasse erzeugen die folgendermaßen aufgebaut sein soll:
klasse PartFeature
---->int ID
---->type Type
--------->eigenschaft x
--------->eigenschaft y
Das Problem ist dass es 4 verschiede type Klassen gibt mit verschiedenen Eigenschaften und ich erst nach dem Ausführen von meinem Programm erfahre welche es sind. Wie kann ich die klasse aufbauen so dass immer die richtige type klasse an der klasse PartFeature "angehängt wird". ich habe mit if und switch versucht aber das war wohl blödsinn.
ich hoffe es ist verständlich.
Danke
Gruß
Lukas
danielf - Do 09.07.09 08:22
Hallo,
also mir ist es noch nicht ganz verständlich.
Wenn deine Klasse abhängig vom Type verschiedene Eigenschaften erhalten soll, dann kannst du die Eigenschaften selbst als Klasse definieren.
C#-Quelltext
1: 2: 3: 4: 5: 6:
| public class PartFeature { property int ID { get; set; } property type Type { get; set; } property Properties TypeSpezificProperties { get; set; } } |
Die TypeSpezificProperties ist eine abstrakte Klasse. Jede deiner vier verschiedenen Typen erstellt eine konkrete Klasse davon (durch Vererbung). So hast du dann indiviuelle Eigenschaften pro Klassen Typ - wenn dies deine Struktur sein soll.
Wenn du nicht an diese Struktur gezwungen bist kannst du das ganze auch selbst als Klassenstruktur abbilden:
Oberklasse: abstrakte class Feature
Unterklassen: Type1, Type2, Type3, Type4
Die Unterklassen erben natürlich von der Oberklasse.
Ich hoffe es hilft dir weiter... ansonsten einfach nochmal schreiben :)
Gruß Daniel
Moderiert von
Christian S.: C#-Tags hinzugefügt
Lukas1983 - Do 09.07.09 09:00
Hallo,
mir geht es darum je nach Parameter die Klasse individuel zu gestalten.
nehmen wir mal ein konkretes Beipiel dann wird es einfacher:
ich habe einen Part(3D Modell - z.B. Platte mit einer Bohrung)
diese enthält eigenschaften wie name, material... (das ist kein Problem weil es immer die selben sind)
dieser Part besteht aus Features (Platte: Feature Quader + Bohrung Feature Hole)
KlasseQuader: abmessungX, abmessungY, abmessungZ
KlasseHole: durchmesser, tiefe, passung
Die Klasse Part sollte dann ein Feld Features[2] beinhalten
Feature[0] = KlasseQuader
Feature[1] = KlasseHole
Es geht also darum dass dass Feld Features je nach dem welche Feature im Part drin sind anders aussieht. Das ganze muss aber in der klasse Part definiert werden weil ich will auf die Informationen über Part.Feature[0].abmessungX zugreifen könnnen.
ich denke dass Dein Vorschlag auch so was ähnliches beinhaltet, könntest Du es aber jetzt auf mein Beispiel beziehen und ein wenig mehr Code schreiben.
Danke
Lukas
Nemag - Do 09.07.09 09:11
Vielleicht versteh ich dein Problem auch nicht wirklich, aber was spricht denn dagegen das du deine zusätzlich typabhängige Eigenschaft als object definierst. Dann kannst du doch damit alles machen was du willst.
Wenn du das extern lesen bzw. setzen willst, muss du das ja dann eh Typabhängig bearbeiten. Und dann kannst du auch in und von object casten.
Th69 - Do 09.07.09 10:33
Hallo Lukas1983,
die Idee von danielf ist schon dir richtige (besser als ein generelles Objekt).
Mach dich am besten mal mit Vererbung und Klassenhierachien vertraut, s.
http://openbook.galileocomputing.de/visual_csharp/ Kapitel 3.11 Vererbung.
Und für dein Feature-Array schau dir auch besonders den letzten Absatz "Arrays vom Typ der Basisklasse" an.
Und bzgl. Code machst du es am besten anders herum, d.h. wenn konkret Fragen auftauchen, postest du den zugehörigen Code (mit Fehlerbeschreibung).
Lukas1983 - Fr 10.07.09 18:31
Hallo!
Danke für die Antworten!
Ich habe es mit einer ArrayList gemacht. In der Klasse habe ich eine ArrayList definiert und später im programm tue ich einzelne FeatureKlassen dazuaddieren.
funktioniert einwandfrei, wenn jemand den Code sehen will, sagt bescheid
Gruß
Lukas
JüTho - Fr 10.07.09 19:03
ArrayList gehört in die Mottenkiste und sollte wie alle untypisierten Collections aus System.Collections nicht mehr benutzt werden. Verwende stattdessen List<T> und alle anderen typisierten Collections aus System.Collections.Generic. Das gilt auch hier, wo du wenigstens die Basisklasse als Typ angeben kannst. Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!