2014-04-23 5 views
7

Come mostrato in questa article, si può definire in C#:Come definire una classe con un vincolo generico autoreferenziale in Delphi?

public class MyTreeNode<T> where T: MyTreeNode<T> 
{ 

} 

In Delphi, invece, il seguente codice non compila e si lamenta "E2003 identificatore non dichiarato: 'MyTreeNode <>'":

type 
    TMyTreeNode<T: TMyTreeNode<T>> = class 
    end; 

La terminologia formale sembra essere "self-referencing generics constraint". Mi chiedo come si fa a Delphi?

PS:

Another useful article as David pointed out.

Relevent SO post regarding Delphi and covariance/contravariance.

Wikipedia page of co/contra-variance.

+1

Non è possibile farlo con i limiti generici di Delphi –

+0

@DavidHeffernan Grazie per il tuo commento! – SOUser

risposta

2

Non esiste alcun modo in Delphi per esprimere un vincolo generico. Inoltre, ritengo che non esista un modo tipicamente valido per ottenere ciò che può essere ottenuto in C# con tale limitazione.

+1

Grazie per il tuo commento! Potresti aiutarmi a spiegare di più su "non esiste un modo tipicamente valido per ottenere ciò che può essere ottenuto in C# con un simile vincolo"? – SOUser

+0

Si stanno utilizzando i generici perché si desidera la sicurezza dei tipi. È possibile implementare il contenitore senza sicurezza del tipo abbandonando i generici. –

+0

Grazie per il tuo commento! Potrebbe aiutare a mostrare un esempio riguardante "È possibile implementare il contenitore senza sicurezza del tipo abbandonando i generici". ? – SOUser

Problemi correlati