Autor Beitrag
Lukas1983
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 09.07.09 00:03 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: 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.
ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
Lukas1983 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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. openbook.galileocomp...ng.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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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