Benutzer mit den meisten Antworten
Klasse mit generischen New, mit zwei Parametern

Frage
-
Hallo,
kann mir jemand sagen wie die Syntax aussieht, wenn ich einen Konstuktor habe, dem ich zwei Parameter übergeben muss.
Public Class wsInstAndConfig(Of t As New) ' !! New sollte zwei Parameter haben. Wie geht das?
Dim _Service As t
Public ReadOnly Property Service As t
Get
Return _Service
End Get
End PropertyPublic Sub New(ByVal strHost As String, Optional ByVal strPort As String = Nothing)
Dim s As String
Try...
_Service = New t(xxx, yyy) ' ???? wie bekomme ich das hin ??
Gruss an Alle
Antworten
-
Hi,
die Lösung könnte so ausgesehen haben werden:Module Module1 Sub Main() Dim email As String = String.Empty Dim password As String = String.Empty Dim IdentificationID As Integer = 0 Dim Text As String = String.Empty Dim wsX1 As New wsConfig(Of wsopfXXX.opfXXXSoapClient)("localhost", 5689) wsX1.Service.Login(email, password, IdentificationID) Dim wsZ1 As New wsConfig(Of wsopfZZZ.opfZZZSoapClient)("wsopf.ServerDev02", Nothing) wsZ1.Service.Melden(email, Text) Console.ReadKey() ' Stopper End Sub End Module Friend Class wsConfig(Of T As New) Public Sub New(ByVal strHost As String, Optional ByVal strPort As Integer? = Nothing) _Service = New T End Sub Private _Service As T Public ReadOnly Property Service As T Get Return _Service End Get End Property End Class Friend MustInherit Class opfXXXSoapBasis Friend Overridable Sub Login(par1 As String, par2 As String, par3 As Integer) End Sub Friend Overridable Sub Melden(par1 As String, par2 As String) End Sub End Class Namespace wsopfXXX Friend Class opfXXXSoapClient Inherits opfXXXSoapBasis Public Sub New() End Sub Friend Overrides Sub Login(par1 As String, par2 As String, par3 As Integer) MyBase.Login(par1, par2, par3) ' End Sub End Class End Namespace Namespace wsopfZZZ Friend Class opfZZZSoapClient Inherits opfXXXSoapBasis Public Sub New() End Sub Friend Overrides Sub Melden(par1 As String, par2 As String) MyBase.Melden(par1, par2) ' End Sub End Class End Namespace
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert comscape Mittwoch, 11. Mai 2016 08:13
Alle Antworten
-
Hi,
Du musst unterscheiden zwischen der Typisierung des Objektes und dem Konstruktor mit 2 formalen Parametern.In der Klassendeklaration kannst Du über eine Aufzählung 2 Typen angeben. Den Konstruktor kannst Du mit beliebig vielen Überladungen deklarieren. Die Anzahl und die Typen der formalen Parametern sind von den in der Klassendeklaration genannten Typen unabhängig, d.h., man kann die Typen nutzen, muss sie aber nicht nutzen.
Das New in der Typliste (in der Klassen-Deklaration) hinter einem formalen Typ-Bezeichner sagt aus, dass der später bei der Instanziierung genutzte Typ einen parameterlosen Konstruktor haben muss.
Hier noch ein Beispiel:
Module Module1 Sub Main() Dim c As New A(Of B, C) Console.ReadKey() ' Stopper End Sub End Module Friend Class A(Of T As New, V As New) End Class Friend Class B Public Sub New() End Sub Friend Sub New(par As Integer) ' End Sub End Class Friend Class C Public Sub New() End Sub Friend Sub New(par As Integer) ' End Sub End Class
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Bearbeitet Peter Fleischer Mittwoch, 4. Mai 2016 10:38 Code-Abschnitt
-
Hallo,
beim New musst Du dann konkretisieren, wie welchen Datentyp die Parameter haben:
Public Class TwoGenerics(Of T1, T2) ' Erzeugen Public ReadOnly Instance As New TwoGenerics(Of Integer, String)(4711, "Eine Zeichenkette") Public Sub New(p1 As T1, p2 As T2) Property1 = p1 Property2 = p2 End Sub Private _property1 As T1 Public Property Property1 As T1 Private Set(value As T1) _property1 = value End Set Get Return _property1 End Get End Property Public Property Property2 As T2 End Class
Etwas variiert um die Unterschiede/Möglichkeiten zu zeigen.
Gruß Elmar
-
Vielen Dank für Eure Antwort!
Leider erschliesst sich für mich die Lösung noch nicht.
Deswegen nochmals ein Stück Code, aus dem hervorgehen soll, was ich machen möchte.Ich möchte verschiedene WebService Typen instanziieren, sowie den Server mitgeben.
Aufruf Varianten:
Dim wsX1 As New wsConfig(Of wsopfXXX.opfXXXSoapClient)("localhost", 5689)
wsX1.Service.Login(email, password, IdentificationID)Dim wsX2 As New wsConfig(Of wsopfXXX.opfXXXSoapClient)("wsopf.ServerDev02", Nothing)
wsX2.Service.Login(email, password, IdentificationID)Dim wsZ1 As New wsConfig(Of wsopfZZZ.opfZZZSoapClient)("wsopf.ServerDev02",Nothing )
wsZ1.Service.Melden(email, Text)
Klasse:
Public Class wsConfig(Of t As New)
Dim _Service As tPublic ReadOnly Property Service As t
Get
Return _Service
End Get
End PropertyPublic Sub New(ByVal strHost As String, Optional ByVal strPort As String = Nothing)
...snip..
Dim binding = New BasicHttpBinding()
binding.Name = "WebService" & asmxName
...snip...
Dim endpointStr = "http://" & strHost & strPort) & "/" & asmxName & ".asmx"
Dim endpoint = New EndpointAddress(endpointStr)'_Service = New wsopfXXX.opfXXXSoapClient(binding, endpoint) das geht wenn nicht as t!
_Service = New t(binding, endpoint) ' hier habe ich das Problem ???
...
Ich muss mit den zwei New Parametern instanzieren, da in der Konfigurationsdatei
kein standardmäßiges Endpunktelement angeben wird.Das was ich bräuchte müsste etwa so aussehen
Public Class wsConfig(Of t As {New, BasicHttpBinding, EndpointAddress})
- Bearbeitet comscape Mittwoch, 4. Mai 2016 11:26
-
Hi,
die Lösung könnte so ausgesehen haben werden:Module Module1 Sub Main() Dim email As String = String.Empty Dim password As String = String.Empty Dim IdentificationID As Integer = 0 Dim Text As String = String.Empty Dim wsX1 As New wsConfig(Of wsopfXXX.opfXXXSoapClient)("localhost", 5689) wsX1.Service.Login(email, password, IdentificationID) Dim wsZ1 As New wsConfig(Of wsopfZZZ.opfZZZSoapClient)("wsopf.ServerDev02", Nothing) wsZ1.Service.Melden(email, Text) Console.ReadKey() ' Stopper End Sub End Module Friend Class wsConfig(Of T As New) Public Sub New(ByVal strHost As String, Optional ByVal strPort As Integer? = Nothing) _Service = New T End Sub Private _Service As T Public ReadOnly Property Service As T Get Return _Service End Get End Property End Class Friend MustInherit Class opfXXXSoapBasis Friend Overridable Sub Login(par1 As String, par2 As String, par3 As Integer) End Sub Friend Overridable Sub Melden(par1 As String, par2 As String) End Sub End Class Namespace wsopfXXX Friend Class opfXXXSoapClient Inherits opfXXXSoapBasis Public Sub New() End Sub Friend Overrides Sub Login(par1 As String, par2 As String, par3 As Integer) MyBase.Login(par1, par2, par3) ' End Sub End Class End Namespace Namespace wsopfZZZ Friend Class opfZZZSoapClient Inherits opfXXXSoapBasis Public Sub New() End Sub Friend Overrides Sub Melden(par1 As String, par2 As String) MyBase.Melden(par1, par2) ' End Sub End Class End Namespace
--
Viele Grüsse
Peter Fleischer (MVP, Partner)
Meine Homepage mit Tipps und Tricks
Kommas richtig setzen!
Schüler sagen, Lehrer haben es gut.
Schüler, sagen Lehrer, haben es gut- Als Antwort markiert comscape Mittwoch, 11. Mai 2016 08:13