Üç sınıfım var, Base
, Derived
ve Final
. Derived
, Base
ve Final
'dan türetilen Derived
'dan türetilmiştir. Her üç sınıfın da statik bir kurucusu vardır. Setup
adlı genel bir statik yöntem olarak Sınıf Derived
. Final.Setup
numaralı telefonu aradığımda, üç statik kurucunun da çalışmasını beklerim, ancak yalnızca Derived
numaralı telefondan yalnızca biri çalışır. Bu sadece kısmen banaNeden tüm statik yapıcılar C# (yani üst sınıflarınkiler) denir?
abstract class Base
{
static Base()
{
System.Console.WriteLine ("Base");
}
}
abstract class Derived : Base
{
static Derived()
{
System.Console.WriteLine ("Derived");
}
public static void Setup()
{
System.Console.WriteLine ("Setup");
}
}
sealed class Final : Derived
{
static Final()
{
System.Console.WriteLine ("Final");
}
}
anlamda yapar: Burada
örnek kaynak kodudur.Final.Setup()
numaralı telefonun aslında
Derived.Setup()
için bir takma ad olduğunu anlıyorum, bu nedenle
Final
'daki statik yapıcıyı atlamak yeterince iyi görünüyor. Ancak, neden
Base
statik kurucusu aranmıyor?
Bunu, Base
no'lu bir işlem statik yöntemini arayarak veya Base
kukla statik yöntemine erişerek giderebilirim. Ama merak ediyordum: Bu garip davranışların ardındaki mantık nedir?
http://msdn.microsoft.com/en-us/library/k9x6w0hc(v=vs.80).aspx – Cipi
İlgili değil, bir çift: http://stackoverflow.com/questions/6390960/c- static-constructor-den-türetilmiş-sınıf- – Abel