Os métodos estáticos em classes genérico?
-
22-08-2019 - |
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":)
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.