Laden...

Mit immer der gleichen Methode verschiedene Datentypen auslesen: Wie den Rückgabetyp managen?

Erstellt von jaipur vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.501 Views
J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 12 Jahren
Mit immer der gleichen Methode verschiedene Datentypen auslesen: Wie den Rückgabetyp managen?

hallo zusammen,

ich habe eine basisklasse, in dieser klasse möchte ich daten aus einer anderen steuerung auslesen, hierbei handelt es sich um datantypen wie Int / DINt / Real (float)

für jeden datantypen habe ich jetzt eine eigene klass erstellt, weil beim lesen von dem anderen "gerät" verschiedene parameter übergeben werden müssen.


class abstract MyBase
{
	public abstract _datentype_ _Datum
	{
		get;
		set;
	}
	public abstract _datentype_ Read();
}

class MyBase_Int
{
	public override _datentype_ Read()
	{
	}
}

class MyBase_B
{
	public override _datentype_ Read()
	{
	}
}

ich weiß jetzt nicht so recht wie ich an dieser stelle weiter machen soll und auhc nicht sooo recht ab ich da auf dem richtigen weg bin ...würde mich hier alleine schon sehr über anregungen freuen!

5.742 Beiträge seit 2007
vor 12 Jahren

ich weiß jetzt nicht so recht wie ich an dieser stelle weiter machen soll

Und ich weiß an dieser Stelle nicht so recht, was eigentlich deine Frage ist.

J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 12 Jahren

class abstract MyBase
 {
     public abstract _datentype_ _Datum
     {
         get;
         set;
     }
     public abstract int Read();
 }
 
class MyBase_Int
 {
     public override float Read()
     {
     }
 }
 
class MyBase_B
 {
     public override _datentype_ Read()
     {
     }
 }

zum einen weiß ich nicht als was für einen datentyp ich den wert in der klasse anlegen soll und zum anderen weiß ich nicht von welchem typ (int16, float, object?) der rückgabewert von der methode Read sein soll...

datentype ist hier nur als platzhalter für ein großes fragezeichen zu verstehen ist

6.862 Beiträge seit 2003
vor 12 Jahren

Hallo,

das sieht eher nach ner Einsatzmöglichkeit für Generics aus, statt Vererbung.

Den Rückgabetypen von einer Methode der Basisklasse kannst du nicht ändern beim Überschreiben in einer Kindklasse.

Baka wa shinanakya naoranai.

Mein XING Profil.

J
jaipur Themenstarter:in
127 Beiträge seit 2007
vor 12 Jahren

so, habe es jetzt mal mit generics versucht:


class abstract MyBase<T>
 {
      public abstract T _Wert
      {
          get;
          set;
      }

      public abstract T Methode();
 }
 
class MyBase_A : MyBase<int>
 {
      public override int _Wert
      {
            get;
            set;
      }

      public override int Methode()
      {
            // magie...
            return 3;
      }
 }
 
class MyBase_B : MyBase<double>
 {
      public override double _Wert
      {
            get;
            set;
      }

      public override double Methode()
      {
            // magie...
            return 3.14;
      }
 }

hiermit lässt sich jetzt das problem lösen das der rückgabetyp ohne probleme ein anderer sein kann ABER wie bekomme ich das jetzt hin das ich in einer liste alle typen verwalten kann?

sobald ich eine liste anlege:
ObservableCollection<MyBase> _Items; //klappt nicht, typ angabe fehlt!
ObservableCollection<MyBase_A> _ItemsA; // ok, kein problem
ObservableCollection<MyBase_B> _ItemsB; // ok, kein problem

ich hatte das mit den ableitungen gemacht damit ich jedem datentypen auch seine eigene metheoden spendieren kann und außerdem muss ich jedem datentypen spezielle parameter übergeben.

...könnte aber auch sein das ich mal wieder voll daneben liege oder kann ich tatsächlich nicht alle typen in einer liste verwalten und/oder wie könnte ich das umgehen!?

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo jaipur,

du kannst schon alle Typen in einer Liste verwalten, indem du eine nicht generische Oberklasse MyBase oberhalb von MyBase<T> einziehst. Natürlich kannst du dann nicht auf Methoden und Properties zugreifen, die erst in MyBase<T> definiert sind, also insbesondere die nicht, die den Typparameter T benutzen. Aber das ist ja auch klar.

herbivore