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

  • »
  • Community
  • |
  • Diskussionsforum
Basisklasse kopieren
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

Basisklasse kopieren

beantworten | zitieren | melden

Hallo,

mein Problem wurde schon teilweise hier besprochen, aber mir fehlt noch das I-Tüpfelchen. Es geht um das Kopieren der Basisklasse. Also das Thema: "B erbt von A, wie erhalte ich nun das Objekt von A?"...

Ich habe mir das hier Klonen von Unterklassen auch schon durchgelesen, aber jetzt kommt für mich ein anderes Problem. Jetzt erstelle ich eine Klasse C, die von A erbt. Meinetwegen ich Clone jetzt die Basisklasse vom Objekt B, wie weise ich nun dieses eine Objekt einfach der Basisklasse von C zu?

Hatte mir schon überlegt, Attribut für Attribut extra zuzuweisen. Aber das kanns ja auch nicht sein, oder? Irgendwie habe ich selber den Eindruck ich gehe falsch an die Sache ran, aber sehe mein Denkfehler nicht.

Gruß Olli
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
Zitat
Original von Unikum
wie weise ich nun dieses eine Objekt einfach der Basisklasse von C zu?
zuweisen kannst Du das nicht, da Du ja einen anderen Typen hast (auch wenn dieser bei beiden Basisklasse ist).
Du kannst aber z.B. eine Methode schreiben, die ein Objekt der Basisklasse annimmt und die eingenen Felder entsprechend setzt.

EDIT: In diesem Fall würde sich aber auch das Klonen erübrigen, da Du auch direkt das Objekt B in die Methode stecken kannst.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
_daniel_
myCSharp.de - Member



Dabei seit:
Beiträge: 227

beantworten | zitieren | melden

bin mir jetzt nicht sicher was du kopieren willst wenn du
Zitat
lso B erbt von A, wie erhalte ich nun das Objekt von A.
willst

geht denn

A a = (A)meinObjeckt;

nicht?
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Nein, der Satz ist unglücklich gewählt. Ich wollte damit nochmals die Thematik benennen. Es war ja öfters die Frage, wie erhalte ich das Objekt von der Basisklasse. Mir gings jetzt nur darum, wie weise ich ein nun ein Objekt von einer Basisklasse einer anderen wieder zu....
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
so wie ich oben beschrieben habe. Eien direkte Zuweisung geht nicht.
Du kannst entweder eine normale Set-Methode schreiben, um ein Objekt der Basisklasse anzunehmen, oder einen Konstruktor. Wie Du#s am besten machst, hängt davon ab ob Du bei der Übergabe ein neues Objekt erstellen willst oder ein vorhandenes verändern.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Ok, habe ich mir schon gedacht...

Nun, da muß ich dann wohl durch :-) Danke dir trotzdem aber...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Unikum,

nur noch mal zur Sicherheit: zuweisen und klonen ist bei Referenztypen ein Unterschied wie Tag und Nacht. Mir ist immer noch nicht klar geworden, was du eigentlich willst (Anwendungsfall).

herbivore
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Hi Habivore...

Ich habe zwei Klassen.. Nennen wir sie Klasse B und C. Beide erben von der Klasse A.

Also ich habe in dem Moment zwei Objekte. Das ist mir klar. Ich wollte jetzt einfach, daß ich einfach die Basisklasse von Klasse B zur Klasse C kopiere.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Unikum,

warum? Klingt sehr, sehr merkwürdig.

Wie heißen die Klassen konkret?

Meinst du wirklich kopieren? Oder zuweisen?

herbivore
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Ich meine eigentlich eher zuweisen. Ich hab mal nen kleines Bild angehangen wie ich mir das so vorstelle.

Ich habe einfach zwei Objekte von der Klasse A erben und ich möchte der Klasse C die Basisklasse der Klasse B zuweisen (sagen wir mal referenzieren). Ich hab schon den ganzen tag probiert das zu bewerkstelligen. Mit Intefaces, abstrakten Klassen. Ich weiß, das geht, ich habe dazu schon mal vor Wochen ein Artikel im Internet dazu gelesen. Aber ich weiß die Seite nicht mehr...

Ich möchte einfach nur die Möglichkeit haben, zu einem bestimmten Zeitpunkt die Basisklasse eines Objektes auf andere Objekte zu referenzieren.

Uff, drück ich mich so unklar aus? Wenn ja, dann tuts mir echt leid. Ich weiß nicht wieso, ich habe heute eine total lange Leitung (liegt am Wochenende was irgendwie sehr partyreich war ).

Gruß Olli
Attachments
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Unikum,

zumindest weiß ich immer noch nicht, was du meinst und willst.

Wenn es um Zuweisung geht, dann ist folgendes problemlos möglich (wobei a, b und c Variablen der Klassen A, B und C sind).

a = b;
a = c;

aber

b = c;
c = b;

sind nicht erlaubt. Stichwort wäre hier Polymorphie.

Wie heißen die Klassen konkret?

herbivore
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Die haben noch gar keinen Namen mein lieber herbivore. Es ging mir einfach nur um die Problematik an sich
private Nachricht | Beiträge des Benutzers
gespannter_Bogen
myCSharp.de - Member



Dabei seit:
Beiträge: 40

beantworten | zitieren | melden

Das mit der Zuweisung funktioniert nicht und das ist auch gut so, denn das würde dem Prinzip der Kapselung widersprechen und kaum zu überblickende Abhängigkeiten erzeugen.
Kopie ist was anderes, da erzeugt man ein unabhängiges neues Objekt.
Dazu müsste in der Basisklasse eine Kopier-Fabrikmethode sein, mit der jeweils neue Objekte der Unterklassen erzeugt werden können. Die Unterklassen haben dann einen protected -Kopier-Konstruktor, der die privaten Felder aus der Basisklasse übernimmt.
Beispiel:
fortlaufender Text, für jede Zeile ein eigenes Objekt mit Textkoordinaten X und Y.
Y wird jeweils hochgezählt, damit die Zeilen schön untereinander kommen. Will man im Textverlauf eine Linie, brauchts dafür ein Objekt einer anderen Unterklasse. Eine Möglichkeit ist nun, in der Basisklasse dieser Objekte ein statisches Feld 'statY ' zu haben, das dann für alle Unterklassen gilt. Funktioniert wunderbar, solange man jeweils nur einen Ausdruck hat. Wenn es mehrere gleichzeitig sind geht das mit dem statischen Feld nicht mehr. Mit dem oben skizziertem Kopierverfahren würde es aber gehen: jede neue Zeile oder Linie usw. wird dann aus der jeweils vorhergehenden erzeugt, übernimmt von ihr über die Basisklasse die Koordinaten, zählt Y hoch und hat natürlich einen anderen Text, der extra zugewiesen werden muss.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo gespannter_Bogen,

das geht aber auch deutlich leichter, wenn die ID-Vergabe als Methode der Oberklasse implementiert ist und von allen Unterklassen genutzt wird. Ich kann mir keinen Fall vorstellen, in dem das, was Unikum will - so wie ich es verstanden habe - Sinn macht.

herbivore
private Nachricht | Beiträge des Benutzers
Unikum
myCSharp.de - Member



Dabei seit:
Beiträge: 228
Herkunft: München

Themenstarter:

beantworten | zitieren | melden

Bei herbivor braucht immer alles eine Brgründung warum wieso weshalb :-) Aber in dem Fall gibts keine Begründung. Das war einfach so ein Gedanke ob es geht und wenn ja wie man es am besten realisieren kann. So einfach. Ich habe ja noch Gedanken dieser Art :-))
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Unikum,
Zitat
Ich habe ja noch Gedanken dieser Art :-))
kannst du ja auch gerne haben. Und gerade deshalb solltest du froh sein, wenn jemand kommt, und die Richtung weist, wenn es die "falsche" ist, wie in diesem Fall.

herbivore
private Nachricht | Beiträge des Benutzers
Borg
myCSharp.de - Member



Dabei seit:
Beiträge: 1.529
Herkunft: Berlin, Germany

beantworten | zitieren | melden

Ich glaube, herbivore will eher verstehen, was du machen willst und nicht warum.

Wenn es dir nur um die einfache Beantwortung deiner Frage ging, wurde das schon im ersten Post erledigt.
Da du jedoch weiterhin nachgehakt hast, weil du dich nicht verstanden fühlst (zugegeben habe ich auch nicht wirklich verstanden, was du machen willst bzw. denkst),
haben natürlich alle versucht deine Pläne und Vorstellungen zu ergründen.

Drück dich doch einfach mal deutlich aus. (etwas C#- oder wenigstens Pseudo-Code wirkt da wahre Wunder).

Und wenn du dann meinst:
Zitat
...und wenn ja wie man es am besten realisieren kann...
dann überführst du dich selbst eines unfairen Verhaltens.
Denn realisieren kann man grundsätzlich alles. Die Frage bleibt immer nur, wie gut es die Sprache unterstützt.
private Nachricht | Beiträge des Benutzers