BaseClass kullanarak eski kodum var ve kod, interieri int türünde olmasını bekliyor. Daha sonra BaseClass gibi davranan yeni bir sınıf olan DerivedClass'ı yaratma zorunluluğum var ama şimdi customerid'in bir string olması gerekiyor. Eski kod, testin gerekli olmaması için değiştirilemez.Aynı adı taşıyan bir özelliği kullanmanın bir yolu var mı, türetilmiş sınıfta farklı türde mi?
Kalıtım (veya başka bir yolla) kullanmak istediğiniz efekti nasıl alabilirim? Aşağıdaki Linqpad test kodunun ne yapmam gerektiğini gösterdiği
. DerivedClass'daki customerid'nin int olması gerektiğinden, bu durum derlenmeyecektir. Ben de customerid adında bir string özelliğine ihtiyacım var. Başka bir kod, bu sınıfı BaseClass yerine kullanacağından ve aynı adlandırılmış özelliği tür dizesinde olmasını beklediği için bu adın olması gerekir.
public class BaseClass
{
public virtual int customerid {get; set;}
public void printname()
{
customerid = 1;
customerid.Dump();
}
}
public class DerivedClass : BaseClass
{
public new string customerid {get; set;}
public void PrintCustomerID()
{
customerid = "jshwedeX";
customerid.Dump();
}
}
Bu, istenen sonuçlar verecektir, ama aynı zamanda temel sınıf özelliği gizler:
public class BaseClass
{
public virtual int customerid {get; set;}
public void printname()
{
customerid = 1;
customerid.Dump();
}
}
public class DerivedClass : BaseClass
{
public override string customerid {get; set;}
public void PrintCustomerID()
{
customerid = "jshwedeX";
customerid.Dump();
}
}
void Main()
{
DerivedClass dc = new DerivedClass();
dc.printname();
}
: açık arabirim uygulamaları değişken arabirim türünde olmadıkça uygulanan üyeler görünmeyebilir neden olduğu
unutmayın [Açık arayüz uygulaması] kullanabilir misiniz (http://msdn.microsoft.com/en-us/library/vstudio/ms173157.aspx)? – millimoose
VB programcıları için, bir özellik, alan vb. Için yeni tanım oluştururken 'Gölgeler' anahtar sözcüğünü kullanın. Bu, dönüş değerleri bir uyumsuzluksa, bir ana türe aktarılırken dinamik programınızı etkileyebilir. – ps2goat