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; };
}
}
Wenn ich versuche, Foo.Calc ("Foo") aufzurufen; Ich habe Ausnahme "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt." weil der statische Konstruktor von Foo nicht aufgerufen wurde und CalcFunction null ist. Ich möchte die Init-Methode für die Foo-Klasse nicht verwenden und sie vor dem Aufruf von Calc() aufrufen.Reihenfolge der Aufrufer
Kann ich die Reihenfolge der aufrufenden Konstruktoren ändern?
Mixing Vererbung und statische Mitglieder scheint ungerade. Wenn 'Calc' und' CalcFunction' nicht statisch wären, hätte 'Foo' einen regulären Instanzkonstruktor und' CalcFunction' würde vor dem Aufruf von 'Calc' initialisiert werden. –