Laden...

Vererbung

Erstellt von .tim vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.302 Views
.
.tim Themenstarter:in
332 Beiträge seit 2006
vor 17 Jahren
Vererbung

Hallo zusammen,

ich habe eine Klasse X1, X2, X3.. welche von Klasse Y abgeleitet es.

Meine Klasse Y enthält Basisinformationen.
Manche Methoden erstellen ein Objekt vom Typ Y.

Gerne würde ich dieses Objekt in X1 oder X2... umwandeln.

Leider funktioniert es nicht.

Ich habe keine Lust aufwendige Methoden zu schreiben welche Y in X umwandelt. Indem es die Member kopiert.

Habt ihr einen Vorschlag?

Danke
Tim

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo .tim,

sollte gehen. Einfach per Cast. Natürlich nur, wenn das Objekt (dynamisch) tatsächlich auch von dem statischen Typ ist, in den es umgewandelt werden soll. Was geht bei dir nicht? Bitte konkretes Beispiel.

herbivore

Gelöschter Account
vor 17 Jahren

du erstellst innerhalb der klasse y objekte vom typ y?
darf ich fragen warum? ( ich bin ehrlichgesagt ein wenig überrascht das es überhaupt geht)

und du willst innerhalb der klasse y ein objekt vom typ y in ein objekt vom typ x1 umwandeln? ( kann mir nicht vorstellen wie das gehen sollte) oder möchtest du innerhalb der klasse x1 das bereits bestehende objekt y in der basisklasse umwandeln zum typ x1? (mit einem einfachen cast wird es wohl nicht gehen)

zu 2.2:
du kannst evtl einen konstruktor in x1 überladen der die klasse y annimmt und die werte einzeln kopiert/clont und den rest mit defaultwerten belegt.

.
.tim Themenstarter:in
332 Beiträge seit 2006
vor 17 Jahren

Das folgende Beispiel beschreibt mein Problem:


public class Form1 : Form
    {
        public Form1()
        {
            Form1 f = (Form1)(new Form());
        }
    }

Als Fehler bekomme ich:

Das Objekt des Typs System.Windows.Forms.Form kann nicht in Typ WindowsApplication4.Form1 umgewandelt werden.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo .tim,

naja, ein Objekt der Oberklasse kannst du natürlich nicht in ein Objekt der Unterklasse umwandeln. Das geht nicht und ist auch gut so.

herbivore

T
512 Beiträge seit 2006
vor 17 Jahren

Stimmt ja auch, das geht nicht.

Form1 ist ein Form. Aber Form ist kein Form1.

So wie ein Hund ein Tier ist, aber ein Tier ist kein Hund.

e.f.q.

Aus Falschem folgt Beliebiges

.
.tim Themenstarter:in
332 Beiträge seit 2006
vor 17 Jahren

ok danke.

EDIT:

Daraus ergibt sich nur folgendes Problem:

private T2 getAll<T, T2>(string queryPath, params object[] parameter)
            where T : BoBase
            where T2 : CollectionBase<T>
        {
            T2 ac = default(T2);

kann ich T2 irgendwie instanziieren?
default setzt ja ac = null;

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo .tim,

where T2 : new(), CollectionBase<T>

und dann

new T2 ();

herbivore

.
.tim Themenstarter:in
332 Beiträge seit 2006
vor 17 Jahren

Super vielen Dank.