Mam starszy kod przy użyciu BaseClass, a kod oczekuje, że customerid będzie typu int. Następnie mam wymóg utworzenia nowej klasy, DerivedClass, która zachowuje się bardzo podobnie do BaseClass, ale teraz customerid musi być łańcuchem. Starszego kodu nie można zmodyfikować, aby nie było potrzeby testowania.Czy istnieje sposób użycia właściwości o tej samej nazwie, ale jest innego typu w klasie pochodnej?
Jak uzyskać pożądany efekt przy użyciu dziedziczenia (lub w jakikolwiek inny sposób)?
Kod testu Linqpad poniżej pokazuje, co muszę zrobić. Oczywiście nie skompiluje się, ponieważ customerid w DerivedClass musi być int. Potrzebuję również właściwości string o nazwie customerid. Musi to być ta nazwa, ponieważ inny kod użyje tej klasy zamiast BaseClass i oczekuje, że ta sama nazwana właściwość będzie ciągiem typu.
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();
}
Czy możesz użyć [jawnej implementacji interfejsu] (http://msdn.microsoft.com/en-us/library/vstudio/ms173157.aspx)? – millimoose
W przypadku programistów VB należy użyć słowa kluczowego "Cienie" podczas tworzenia nowej definicji właściwości, pola itp. Może to mieć wpływ na programowanie dynamiczne podczas rzutowania na typ nadrzędny, jeśli wartości zwracane są niezgodne. – ps2goat