Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Vererbung von Klassen

1 view
Skip to first unread message

Alexander Widera

unread,
Feb 9, 2006, 9:21:11 AM2/9/06
to
Hallo,

folgendes Szenario:

abstract class MeineKlasseVorlage
{
....
....
internal class MeineInnereKlasse { ... }
....
}

--> landet in einer .dll
die dll benutzt ein Anwender und erstellt folgende Klasse


class MeineKlasse : MeineKlasseVorlage { ... }


In der Klasse "MeineKlasseVorlage" wird nun aber in einer Methode der
subklasse (MeineInnereKlasse) auf ein Objekt vom Typ MeineKlasse zugegriffen
(und nicht MeineKlasseVorlage).
Der Benutzer der dll, soll ja aber diese Klasse erst noch anlegen.

Wie kann ich dieses Problem lösen?

Danke,
Alex


Frank Dzaebel

unread,
Feb 9, 2006, 9:56:43 AM2/9/06
to
Hallo Alexander,

> abstract class MeineKlasseVorlage
> { internal class MeineInnereKlasse { ... } }


> class MeineKlasse : MeineKlasseVorlage { ... }
> In der Klasse "MeineKlasseVorlage" wird nun aber in einer Methode der
> subklasse (MeineInnereKlasse) auf ein Objekt vom Typ MeineKlasse zugegriffen
> (und nicht MeineKlasseVorlage).
> Der Benutzer der dll, soll ja aber diese Klasse erst noch anlegen.

Also - wenn es MeineKlasse schon gibt (in der DLL)
dann kann man diese Klasse nicht einfach noch einmal
erstellen - oder muss sie ggf. über Namespace unterscheiden.
Ich schätze du meinst etwa folgendes:

public abstract class Gefährt
{ internal class MeineInnereKlasse { }
public class MeineKlasse {}
abstract public void Fahren(MeineKlasse km);
}

class MeinAuto : MyDllName.Gefährt
{
public override void Fahren(MyDllName.Gefährt.MeineKlasse mk)
{
MessageBox.Show("Mein Auto fährt");
}
}


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Alexander Widera

unread,
Feb 9, 2006, 10:18:01 AM2/9/06
to
Eher so war es gemeint:

das ist in der .dll:

public abstract class MeineKlasseVorlage
{
...
...
internal class MeineInnereKlasse
{
MeineKlasse mk = new MeineKlasse();
}
}


Und
public class MeineKlasse:MeineKlasseVorlage { }
wird erst später implementiert...

Irgendwie muss ich das umstrukturieren... oder anders aufbauen... oder?

Alex


"Frank Dzaebel" <Po...@FranksSeite.de> schrieb im Newsbeitrag
news:ujDeOkYL...@tk2msftngp13.phx.gbl...

Frank Dzaebel

unread,
Feb 9, 2006, 11:28:40 AM2/9/06
to
Hallo Alexander,

> public abstract class MeineKlasseVorlage
> { internal class MeineInnereKlasse
> { MeineKlasse mk = new MeineKlasse();}
> }

Wenn Du eine Klasse (hier MeineKlasse) erst später
implementieren willst, musst Du sie abstract machen.
Dann kannst Du aber keine Instanz von ihr erzeugen.
Es geht aber über Interfaces.


> Irgendwie muss ich das umstrukturieren... oder anders aufbauen... oder?

Wäre z.B. über Interfaces möglich:

// DLL.cs:
public abstract class MeineKlasseVorlage
{
internal class MeineInnereKlasse
{ MeineKlasse mk = new MeineKlasse();
}
internal class MeineKlasse : IMeinInterface
{ public void Fahren(){throw new Exception("not implemented.");}
}
}
public interface IMeinInterface
{ void Fahren();
}

// Aufruf.cs:

class MeineKlasse : MyDllName.IMeinInterface
{ public void Fahren()
{ MessageBox.Show("Meine Implementierung");
}
}

Du musst IMHO jetzt dem DLL-MeineKlasseVorlage-
Konstruktor die Instanz Deiner neu implementierten
MeineKlasse mitgeben.

0 new messages