2009-03-31 24 views
5

Okay, questo è il caso:Metodi statici su classi generiche?

Ho una classe base generica che ho bisogno di inizializzare con alcuni valori statici. Questi valori non hanno nulla a che fare con il tipo di tipi con cui viene caricata la mia generica baseclass.

Voglio essere in grado di fare qualcosa del genere:

GenericBaseclass.Initialize(AssociatedObject); 

si affianca anche una classe facendo in questo modo:

public class DerivedClass : GenericBaseclass<int> 
{ 
    ... 
} 

Esiste un modo per ottenere questo risultato? Potrei creare una baseclass non generica e mettere lì il metodo statico, ma non mi piace "hack" :)

+0

A parte una classe base non generica che è l'unico modo per farlo come è già stato sottolineato, voglio solo aggiungere che farlo non è un 'hack' ma è in realtà il modo corretto per farlo. –

risposta

14

Se i valori non hanno nulla a che fare con il tipo della classe base generica, quindi non dovrebbero essere nella classe base generica Dovrebbero essere in una classe completamente separata o in una classe base non generica della classe generica.

Tenete a mente che per le variabili statiche, si ottiene una variabile statica diverso per ogni tipo di combinazione argomento:

using System; 

public class GenericType<TFirst, TSecond> 
{ 
    // Never use a public mutable field normally, of course. 
    public static string Foo; 
} 

public class Test 
{  
    static void Main() 
    { 
     // Assign to different combination 
     GenericType<string,int>.Foo = "string,int"; 
     GenericType<int,Guid>.Foo = "int,Guid"; 
     GenericType<int,int>.Foo = "int,int"; 
     GenericType<string,string>.Foo = "string,string"; 


     // Verify that they really are different variables 
     Console.WriteLine(GenericType<string,int>.Foo); 
     Console.WriteLine(GenericType<int,Guid>.Foo); 
     Console.WriteLine(GenericType<int,int>.Foo); 
     Console.WriteLine(GenericType<string,string>.Foo); 

    } 
} 

Sembra che non si davvero vogliono una variabile statica diversa per ogni T del vostro generici classe base - quindi non puoi averlo in la tua classe base generica.

+0

"Dovrebbe" come in "best practice" o "dovrebbe" come in "l'unico modo per ottenere il comportamento desiderato"? :) – cwap

+0

Se si desidera una sola variabile statica nonostante vengano forniti argomenti di tipo diverso, è "l'unico modo per ottenere il comportamento desiderato". –

+0

Grazie per aver chiarito .. Avrei dovuto farlo da solo, mi dispiace per quello. Ma ha perfettamente senso :) - Ora vai a letto Mr. Know-it-all: P – cwap

6

Questo è esattamente quello che devi fare. Quando si dispone di un parametro di tipo, ogni diversa istanziazione del tipo è un separato tipo. Questo porta a separare le variabili statiche.

L'unica soluzione è quella di avere una classe base derivata dalla classe generica.

Problemi correlati