class Program
{
static void Main(string[] args)
{
Foo.Calc("Foo");
}
}
public abstract class Base
{
protected static Func<string, int> CalcFunction;
public static void Calc(string str)
{
Console.WriteLine(CalcFunction(str));
}
}
public class Foo : Base
{
static Foo()
{
CalcFunction = s => { return s.Length; };
}
}
Cuando intento llamar a Foo.Calc ("Foo"); Tengo la excepción "Referencia de objeto no establecida en una instancia de un objeto". porque no se llamó al constructor estático de Foo y CalcFunction es nulo. No quiero utilizar el método Init para la clase Foo y llamarlo antes de llamar a Calc().Constructores de la orden de llamada
¿Puedo cambiar el orden de los constructores de llamadas?
La herencia de mezcla y los miembros estáticos parece extraña. Si 'Calc' y' CalcFunction' no fueran estáticos, entonces 'Foo' tendría un constructor de instancia regular, y' CalcFunction' se inicializaría antes de la llamada a 'Calc'. –