tengo el código de abajo:compilador de C#: no se puede acceder método estático en un contexto no estático
public class Anything
{
public int Data { get; set;}
}
public class MyGenericBase<T>
{
public void InstanceMethod(T data)
{
// do some job
}
public static void StaticMethod(T data)
{
// do some job
}
// others members...
}
public sealed class UsefulController : MyGenericBase<Anything>
{
public void ProxyToStaticMethod()
{
StaticMethod(null);
}
// others non derived members...
}
public class Container
{
public UsefulController B { get; set; }
}
public class Demo
{
public static void Test()
{
var c = new Container();
c.B.InstanceMethod(null); // Works as expected.
c.B.StaticMethod(null); // Doesn't work.
// Static method call on object rather than type.
// How to get the static method on the base type ?
c.B.ProxyToStaticMethod(); // Works as expected.
}
}
el compilador está muy enojado ... entiendo el mensaje de error, pero no sé cómo resuelve esto. Estaba intentando obtener un tipo en lugar de un objeto para hacer mi llamada al método estático, pero no encuentro la manera de hacerlo correctamente. Además, esto da como resultado algo no elegante en absoluto.
Básicamente, GenericBase es una clase de un framework con muchos métodos estáticos y algunos métodos de instancia. El controlador está escribiendo esta clase y ampliándola.
El contenedor es un grupo de controladores lógicos relacionados.
Una cosa interesante: una versión de Java de este código se compila correctamente, pero con una advertencia. La ejecución es correcta también.
¿Existe un patrón de diseño para resolver esto?
Gracias por sus entradas!
He encontrado la manera de deshacerte de este problema, gracias a tus respuestas. Parece que funciona, pero no puedo decir si hay efectos secundarios.
public class GenericBase<T> : MyGenericBase<T>
{
// Create instance calls here for every base static method.
}
public sealed class UsefulController : GenericBase<Anything>
{
// others non derived members...
}
Muy instructivo, gracias!Leyendo las respuestas a continuación, me pregunto acerca de una posible solución. Siéntete libre de comentar –
después de todo, no se llaman STATIC por nada – BlackTigerX