2009-03-31 12 views
5

Bien, este es el caso:Métodos estáticos en clases genéricas?

Obtuve una clase base genérica que necesito inicializar con algunos valores estáticos. Estos valores no tienen nada que ver con el tipo de tipos con los que se carga mi clase base genérica.

Quiero ser capaz de hacer algo como esto:

GenericBaseclass.Initialize(AssociatedObject); 

al mismo tiempo tener una clase haciendo de esta manera:

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

¿Hay alguna manera de lograr esto? Podría hacer una clase base no genérica y poner el método estático allí, pero no me gusta ese "truco" :)

+0

Aparte de que una clase base no genérica es la única manera de hacerlo, como ya se ha señalado, solo quiero añadir que hacerlo no es un 'hack', sino que es la forma correcta de hacerlo. –

Respuesta

14

Si los valores no tienen nada que ver con el tipo de la clase base genérica, entonces shouldn No estar en la clase base genérica. Deben estar en una clase completamente separada o en una clase base no genérica de la clase genérica.

tener en cuenta que para las variables estáticas, se obtiene una variable estática diferente según el tipo de combinación argumento:

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); 

    } 
} 

Suena como que no realmente quieren una variable estática diferente por T de su genérica clase base, por lo que no puede tenerlo en su clase base genérica.

+0

"Debería" como en "mejores prácticas" o "debería" como en "la única forma de lograr el comportamiento deseado"? :) – cwap

+0

Si solo quiere una variable estática a pesar de que se proporcionan argumentos de tipo diferente, es "la única forma de lograr el comportamiento deseado". –

+0

Gracias por aclarar ... Debería haberlo hecho yo mismo, lo siento. Tiene perfecto sentido sin embargo :) - Ahora, ve a la cama Sr. Sabelotodo: P – cwap

6

Eso es exactamente lo que tienes que hacer. Cuando tiene un parámetro de tipo, cada instanciación diferente del tipo es tipo por separado. Esto lleva a variables estáticas separadas.

La única solución es tener una clase base de la que se deriva la clase genérica.

Cuestiones relacionadas