Generics

19/10/2007 - 19:27 von Volker Heil | Report spam
Hi,

ich möchte eine Function basteln, die je nach Typangabe beim Aufruf
mit Byte, Int16, Int32 oder Int64 rechnet.
Ich kann den Typ angeben und auch rudimentàr damit arbeiten, ihn zum
Beispiel in eine Listbox schreiben.
Aber sobald ich Versuche damit zu rechnen, sagt er "Operator dafür
nicht definiert".
Einerseits klar, denn er weiss ja noch nicht was für ein Typ kommt. Es
könnte ja ein Steuerelement sein, was sich nicht addieren làsst.
Andererseits, warum darf ich das dann in die Listbox schreiben?
Verzweifelte Versuche mit Cast/CType haben nix gebracht.
Für was kann ich bitte die Typen übergeben, wenn ich anschliessend nix
damit anstellen kann???

Mein Beispiel:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
Dim x As New clsA(Of Int32)
MsgBox(x.fB(3))
End Sub
End Class

Class clsA(Of T)
Function fB(ByVal X As T) As Int32
Form1.ListBox1.Items.Add(X) ' geht
Form1.ListBox1.Items.Add(X + X) ' geht nicht
Form1.ListBox1.Items.Add(CType(X, T) + CType(X, T)) ' geht
nicht
Return 1
End Function
End Class

Tschüss,

Volker
 

Lesen sie die antworten

#1 Philipp Brune
19/10/2007 - 19:48 | Warnen spam
Hallo Volker,

das Problem hier liegt darin, dass die von Dir angegebenen Typen zwar
jeder für sich die entsprechenden Operatoren definiert sie aber keine
gemeinsame Schnittstelle implementieren die man in Deiner generischen
Function referenzieren könnte um die einzelnen Operationen durchzuführen.

Du könntest einerseits die Operatoren über Reflection aufrufen, oder
andereseits eine Wrapperschnittstelle definieren welche die Operatoren
bereitstellt und diese dann Deiner Function als Parameter übergeben.
Eine weitere ( in meinen Augen etwas unschöne ) Methode wàre
entsprechende Überladungen Deiner Methode für die jeweiligen Typen
bereitzustellen.

Einfacher geht es (meines Wissens nach) leider nicht

Schöne Grüße
Philipp


Volker Heil schrieb:
Hi,

ich möchte eine Function basteln, die je nach Typangabe beim Aufruf
mit Byte, Int16, Int32 oder Int64 rechnet.
Ich kann den Typ angeben und auch rudimentàr damit arbeiten, ihn zum
Beispiel in eine Listbox schreiben.
Aber sobald ich Versuche damit zu rechnen, sagt er "Operator dafür
nicht definiert".
Einerseits klar, denn er weiss ja noch nicht was für ein Typ kommt. Es
könnte ja ein Steuerelement sein, was sich nicht addieren làsst.
Andererseits, warum darf ich das dann in die Listbox schreiben?
Verzweifelte Versuche mit Cast/CType haben nix gebracht.
Für was kann ich bitte die Typen übergeben, wenn ich anschliessend nix
damit anstellen kann???

Mein Beispiel:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles Button1.Click
Dim x As New clsA(Of Int32)
MsgBox(x.fB(3))
End Sub
End Class

Class clsA(Of T)
Function fB(ByVal X As T) As Int32
Form1.ListBox1.Items.Add(X) ' geht
Form1.ListBox1.Items.Add(X + X) ' geht nicht
Form1.ListBox1.Items.Add(CType(X, T) + CType(X, T)) ' geht
nicht
Return 1
End Function
End Class

Tschüss,

Volker

Ähnliche fragen