Soyut bir temel sınıf var ve bir alan veya bu üst sınıftan devralan her sınıfta farklı bir değere sahip bir özellik bildirmek istiyorum.
Temel sınıf yönteminde başvurabilirsiniz böylece baseclass içinde tanımlamak istiyorum - örneğin "Bu nesne türü özellik / alan olduğunu" demek için ToString geçersiz kılma . Bunu yaparken görebildiğim üç yol var, ama merak ediyordum - bunu yapmanın en iyi ya da kabul edilen yolu nedir? Acemi soru, üzgünüm.
Seçenek 1:
Soyut bir Özellik kullanın ve devralınan sınıflarda geçersiz kılın. Bu zorlanmaktan yararlanır (geçersiz kılmanız gerekir) ve temizdir. Ancak, bir alanı kapsüllemek yerine sabit kod değerini döndürmek biraz yanlış hissettirir ve sadece kod satırları yerine birkaç satırdır. Ayrıca "set" için bir vücut beyan etmek zorundayım ama bu daha az önemli (ve muhtemelen farkında olmadığım bir şeyden kaçınmanın bir yolu var).
abstract class Father
{
abstract public int MyInt { get; set;}
}
class Son : Father
{
public override int MyInt
{
get { return 1; }
set { }
}
}
Seçenek 2
Ortak bir alan (veya korunan bir alan) bildirebilir ve miras alınan sınıfta açıkça geçersiz kılabilirim. Aşağıdaki örnek bana "yeni" kullanmak için bir uyarı verecektir ve muhtemelen bunu yapabilirim, ancak yanlış geliyor ve bütün mesele olan polimorfizmi bozuyor. İyi bir fikir gibi görünmüyor ...
abstract class Mother
{
public int MyInt = 0;
}
class Daughter : Mother
{
public int MyInt = 1;
}
Seçenek 3
Korumalı bir alan kullanabilir ve değeri yapıcıda ayarlayabilirim. Bu oldukça düzenli görünüyor ama bana her zaman kurucu bunu ayarlar ve aşırı yüklü kurucuları ile her zaman bazı kod yolu değeri ayarlama şansı vardır güveniyor.
abstract class Aunt
{
protected int MyInt;
}
class Niece : Aunt
{
public Niece()
{
MyInt = 1;
}
}
Bu biraz teorik bir soru ve sanırım tek seçenek güvenli olduğu için cevap seçenek 1 olmalı ama sadece C # ile başa çıkıyorum ve daha fazla deneyime sahip insanlara sormak istedim.