Abstract und Ableitungen

Hallo,

ich habe 3 Klassen

Eine Basisklasse und 2 Klassen die davon ableiten.

Nun möchte ich eine Methode erstellen die von beiden Ableitungen überschrieben wird.
Nun möchte ich ein Object erstellen. Ich weiß zwar das es auf jeden Fall vom Typ Basisklasse ist aber nicht genau welche Ableitung.

Ich versuche es mal darzustellen.

public abstract class Basisklasse
{
protected abstract int Foo(byte[] b);
}

public class Ableitung1 : Basisklasse
{
protected override Basisklasse Foo(byte[] b)
{
Ableitung2 ab2 = new Ableitung2 ();
ab2.wert = 5;
return ab2;
}
}

public class Ableitung2 : Basisklasse
{

protected override Basisklasse Foo(byte[] b)
{
Ableitung2 ab2 = new Ableitung2 ();
ab2.wert = 5;
return ab2;
}
}

nun möchte ich ein Objekt erzeugen aber ich weiß nicht welches weil ich das byte[] nicht auswerten will.
das soll ja die basisklasse machen.

ich möchte Basisklasse und die abstrakte Methode aufrufen.
Dann soll er in die entsprechende Klasse rein.

Basisklasse class1 = Basisklasse.Foo();

if(class1 is Ableitung1)

Alles etwas schematisch.
Nur wie stelle ich das genau an?
Wie kann meine Basiklasse entscheiden welche Methode bzw welche Ableitung sie nimmt?

Oder ist meine Idee schon im Ansatz falsch ?

Was ich nicht möchte ist eben ein
Ableitung1 ab1 = new Ableitung1();
Ableitung2 ab2 = new Ableitung2();
usw.

Sorry wenn ich mich kompliziert ausdrücke.

Danke im vorraus
Martin

Hallo!

Irgendwie funktioniert das hinten und vorne nicht - Du deklarierst Foo () in der Basisklasse so, dass int zurückgegeben wird. In den Ableitungen wird aber eine Instanz der Basisklasse geliefert? Außerdem wird der byte[] Parameter nirgends verwendet und aus beiden Ableitungen eine Instanz von Ableitungs2 geliefert?

So macht das ganze keinen rechten Sinn. Was willst Du denn eigentlich erreichen? Soll das so eine Art Factory-Methode werden, die aus einem byte[] ein Objekt macht? Dann wird es keine virtuelle Methode der Basisklasse, sondern eine statische Methode derselben.

Kannst Du Dein Vorhaben noch anders beschreiben, so dass man sich etwas darunter vorstellen kann?

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

Hallo!

Irgendwie funktioniert das hinten und vorne nicht - Du
deklarierst Foo () in der Basisklasse so, dass int
zurückgegeben wird. In den Ableitungen wird aber eine Instanz
der Basisklasse geliefert? Außerdem wird der byte[] Parameter
nirgends verwendet und aus beiden Ableitungen eine Instanz von
Ableitungs2 geliefert?

So macht das ganze keinen rechten Sinn. Was willst Du denn
eigentlich erreichen? Soll das so eine Art Factory-Methode
werden, die aus einem byte[] ein Objekt macht? Dann wird es
keine virtuelle Methode der Basisklasse, sondern eine
statische Methode derselben.

Kannst Du Dein Vorhaben noch anders beschreiben, so dass man
sich etwas darunter vorstellen kann?

Gruß,
Martin

Ja sorry.
die Datentypen waren falsch. Zu schnell geschrieben.

Ja ne Art Factory.
Ich habe ein byte[] und daraus wird ein Objekt.
Entweder von Typ Ableitung1 oder Ableitung2.

In beiden Ableitungen gibt es eine Methode ToObjekt(byte[] bytes) meintet wegen.
In der Basisklasse gibt es auch eine Methode ToObjekt(byte[] bytes) aber abstract.
In den Ableitungen überscheib ich sie.

So und nun möchte ich die Methode aufrufen.
Aber wie ? und Welche ?
Von der Basisklasse oder von den Ableitungen ?

Oder muß ich das echt vorherentscheiden welches Objekt ich anlegen möchte.
Ich weiß das die Information dazu im ersten byte des Arrays steht.

1000 Dank

Hallo nochmal!
Ich würde es wirklich so machen, dass die Erstellung des einen oder anderen Objekts in einer statischen Methode einer separaten Factoryklasse gemacht wird.
Also sowas in der Art:

public class BasisklasseFactory
{
 public static Basisklasse GetObject(byte[] b)
 {
 Basisklasse res = null;
 if (b[0] == 0)
 res = new Ableitung1();
 else
 res = new Ableitung2();
 
 // was auch immer mit dem Rest des Bytearrays zu tun ist...
 return res;
 }
}

Ggf. kann das Objekt auch direkt aus den Bytes erzeugt werden, wenn es sich um eine Objektserialisierung handelt (hast Du Dir schon mal die Klasse BinarySerializer angeschaut?), aber nachdem Du schreibst, dass das erste Byte darüber entscheidet, welche konkrete Klasse erzeugt werden soll, scheint das ja nicht zuzutreffen…

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]