Qual è la sintassi per un costruttore predefinito per una classe generica?


86

È vietato in C # implementare un costruttore predefinito per una classe generica?

In caso contrario, perché il codice seguente non viene compilato? (Quando lo rimuovo <T>viene compilato)

Qual è quindi il modo corretto di definire un costruttore predefinito per una classe generica?

public class Cell<T> 
{
    public Cell<T>()
    {
    }
}

Errore in fase di compilazione : Errore 1 Token non valido "(" nella dichiarazione di classe, struttura o membro dell'interfaccia

Risposte:


144

Non fornisci il parametro di tipo nel costruttore. Ecco come dovresti farlo.

public class Cell<T> 
{
    public Cell()
    {
    }
}

11

E se hai bisogno del Tipo come proprietà:

public class Cell<T>
{
    public Cell()
    {
        TheType = typeof(T);
    }

    public Type TheType { get;}
}

6

E se hai bisogno di iniettare un'istanza del tipo:

public class Cell<T>
{
    public T Thing { get; }

    public Cell(T thing)
    {
        Thing = thing;
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.