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; };
}
}
Kiedy próbuję wywołać Foo.Calc ("Foo"); Mam wyjątek "Odwołanie do obiektu nie jest ustawione na instancję obiektu". , ponieważ konstruktor statyczny Foo nie został wywołany, a funkcja calcFunction ma wartość null. Nie chcę używać metody Init dla klasy Foo i wywołuj ją przed wywołaniem Calc().Zamówienie wywołań konstruktorów
Czy mogę zmienić kolejność wywoływania konstruktorów?
Mieszanie dziedziczenia i elementów statycznych wydaje się dziwne. Jeśli 'Calc' i' CalcFunction' nie były statyczne, to 'Foo' miałby zwykły konstruktor instancji, a' CalcFunction' byłby inicjalizowany przed wywołaniem 'Calc'. –