Solo quería tirarlo por ahí que a veces los delegados resuelven estos problemas, dependiendo del contexto.
Si necesita llamar al método estático como una especie de fábrica o método de inicialización, puede declarar un delegado y pasar el método estático a la fábrica genérica pertinente o lo que sea que necesite esta "clase genérica con este método estático ".
Por ejemplo:
class Factory<TProduct> where TProduct : new()
{
public delegate void ProductInitializationMethod(TProduct newProduct);
private ProductInitializationMethod m_ProductInitializationMethod;
public Factory(ProductInitializationMethod p_ProductInitializationMethod)
{
m_ProductInitializationMethod = p_ProductInitializationMethod;
}
public TProduct CreateProduct()
{
var prod = new TProduct();
m_ProductInitializationMethod(prod);
return prod;
}
}
class ProductA
{
public static void InitializeProduct(ProductA newProduct)
{
// .. Do something with a new ProductA
}
}
class ProductB
{
public static void InitializeProduct(ProductB newProduct)
{
// .. Do something with a new ProductA
}
}
class GenericAndDelegateTest
{
public static void Main()
{
var factoryA = new Factory<ProductA>(ProductA.InitializeProduct);
var factoryB = new Factory<ProductB>(ProductB.InitializeProduct);
ProductA prodA = factoryA.CreateProduct();
ProductB prodB = factoryB.CreateProduct();
}
}
Lamentablemente no se puede hacer cumplir la clase que tiene el método correcto, pero puede al menos en tiempo de compilación reforzar que el método de fábrica resultante tiene todo lo que espera (es decir, una método de inicialización con exactamente la firma correcta). Esto es mejor que una excepción de reflexión de tiempo de ejecución.
Este enfoque también tiene algunos beneficios, es decir, puede volver a utilizar los métodos de arranque, haga que sean los métodos de instancia, etc.
Ver http://blogs.msdn.com/b/ericlippert/archive/2007/06/ 14/calling-static-methods-on-type-parameters-is-illegal-part-one.aspx, y http://blogs.msdn.com/b/ericlippert/archive/2007/06/18/calling-static -methods-on-type-parameters-is-illegal-part-two.aspx y http://blogs.msdn.com/b/ericlippert/archive/2007/06/21/3445650.aspx para obtener más información sobre este tema. –