Pergunta

Ok, este é o caso:

Eu tenho uma base de classe genérica que eu preciso para inicializar com alguns valores estáticos. Estes valores não têm nada a ver com o tipo de tipos de minha baseclass genérico é carregado com.

Eu quero ser capaz de fazer algo parecido com isto:

GenericBaseclass.Initialize(AssociatedObject);

tendo também uma classe fazendo assim:

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

Existe alguma maneira de conseguir isso? Eu poderia fazer baseclass não-genéricos e colocar o método estático lá, mas eu não gosto disso "hack":)

Foi útil?

Solução

Se os valores não têm nada a ver com o tipo da classe base genérica, então eles não devem estar na classe base genérico. Eles devem ser tanto em uma classe completamente separada, ou em uma classe base não-genérico da classe genérica.

Tenha em mente que para variáveis ??estáticas, você tem uma variável estática diferente por combinação tipo de 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);

    }
}

Parece que você não realmente quer uma variável estática diferente por T de sua classe base genérica - assim você não pode tê-lo em sua classe base genérico .

Outras dicas

Isso é exatamente o que você tem que fazer. Quando você tem um parâmetro de tipo, cada instanciação diferente do tipo é uma separado tipo. Isto leva a separar variáveis ??estáticas.

A única solução é ter uma classe base que deriva a classe genérico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top