İlk olarak bir meslektaşımın nesne havuzlarını uygularken bunu yaptığını gördüm. Genel bir temel sınıfa parametre olarak bir araya getirilecek olan sınıfı geçti. Bu temel sınıf, havuz kodunu belirledi.Bir sınıfın kendisini genel bir temel sınıf kötülüğüne bir parametre olarak iletmesine izin mi veriyor?
Tuhaf olan şey, temel sınıfın çocuklarını bilmesidir. Bu her normal durumda kötü uygulama olarak kabul edilir. Ancak bu durumda ebeveyn, tekrarlayan kod yazmamak için sadece teknik bir çözümdür. Temel sınıf asla başka bir kod tarafından başvurulmamaktadır.
Bu konstrüksiyonun bir dezavantajı "temel sınıfı yakar" olmasıdır. Genel taban sınıfını bir hiyerarşinin ortasında tanıtamazsınız. Bu sorun konu dışında olabilir.
public abstract class Singleton<T> where T : class
{
public static T Instance { get; private set; }
public Singleton()
{
if (Instance != null)
throw new Exception("Singleton instance already created.");
Instance = (T) (object) this;
}
}
public class MyClass : Singleton<MyClass>
{
}
Geliştirilmiş kod: Aşağıda
bir düşünülemez örnektirpublic abstract class Singleton<T> where T : Singleton<T>
{
public static T Instance { get; private set; }
public Singleton()
{
if (Instance != null)
throw new Exception("Singleton instance already created.");
Instance = (T) this;
}
}
public class MyClass : Singleton<MyClass>
{
}
Aklım bu son cümleyle patlıyor. sınıf TekTon Burada T: Singleton ? Sonsuza dek yinelemeli gitmenizi gerektirmez (her T'nin bir Tekton olması gerekirdi, burada T bir tekil , vs vs olurdu) –
Kristof
Eklenen SLaks kodu iyileştirmesi. İlk satır başınızı döndürüyor. –
@Kristof Örneğe bakınız: "public MyClass: Singleton" yukarıdaki.'MyClass' IS-A 'Singleton ' türünde çalışır. Yine de biraz beyin erimesi. –