27 messaggi dal 15 luglio 2003
Buongiorno,
sto iniziando a lavorare con i Generics (per il porting si un progetto da C#a VB) e dovrei 'tradurre' la seguente dichiarazione di classe:

public class ProvaItemsClass<T> : IProvaItems where T : ProvaClass, new()
{
....
}

Ho provato così:

Public Class ProvaItemsClass(Of T As {IProvaItems , ProvaClass, New})
(
...
)

ma non credo che sia corretta in quanto non mi segnala la mancanza di metodo dichiarato nell'interfaccia IProvaItems.

Dove sbaglio?
Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, prova così:
Public Class ProvaItemsClass(Of T As {ProvaClass, New})
  Implements IProvaItems
...
End Class


Il problema era l'interfaccia IProvaItems. Essa deve essere implementata dalla classe ProvaItemsClass (parola chiave Implements), anziché un vincolo di T.

ciao
Modificato da BrightSoul il 05 gennaio 2012 22.48 -

Enjoy learning and just keep making
27 messaggi dal 15 luglio 2003
Si esatto,
pensavo anch'io che il problema fosse quello, e la tua conferma mi tolto ogni dubbio.

Ciao e grazie
678 messaggi dal 12 maggio 2001
www.idioteca.it
Ti consiglio questo convertitore online ben fatto e che ad oggi non mi hai mai dato problemi con sintassi particolari:
http://converter.telerik.com/
ciao
27 messaggi dal 15 luglio 2003
Altra domanda.
Il vincolo New impone la presenza di un costruttore senza parametri, ma il mio tipo ProvaClass ha un costruttore con un parametro, quindi l'ho tolto (il vincolo):

Public Class ProvaItemsClass(Of T As {ProvaClass})
Implements IProvaItems
...


Nella mia classe ho una però una funzione che dovrebbe generare un elemento T

Public Function NewItem(ByVal param As String) As ProvaClass Implements IProvaItemsClass.NewItem
Return New T(param)
End Function

Però New T(param) mi da errore.

Come posso fare?
Modificato da g.arcangeli il 07 gennaio 2012 19.25 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, puoi usare Activator.CreateInstance per crearti un'istanza del tipo desiderato, passando eventualmente degli argomenti.

Dim nuovaIstanza As ProvaClass = CType(Activator.CreateInstance(GetType(T), param), ProvaClass)
Il metodo .CreateInstance restituisce un Object, quindi uso il CType per castarlo a ProvaClass, che era tra i vincoli di T.

ciao

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.