我有使用BaseClass的遗留代码,代码期望customerid的类型为int。然后我需要创建一个新的类DerivedClass,它的行为非常像BaseClass,但现在customerid需要是一个字符串。遗留代码无法修改,因此无需进行测试。有没有办法在派生类中使用具有相同名称但属于不同类型的属性?
如何使用继承(或任何其他方式)获得我想要的效果?
下面的Linqpad测试代码说明了我需要做的事情。显然它不会编译,因为DerivedClass中的customerid需要是int。我需要一个名为customerid的字符串属性。它需要是该名称,因为其他代码将使用此类而不是BaseClass,并且期望相同的命名属性为字符串类型。
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();
}
你可以使用[显式接口实现](http://msdn.microsoft.com/en-us/library/vstudio/ms173157.aspx)? – millimoose
对于VB程序员,在为属性,字段等创建新定义时使用关键字'Shadows'。如果返回值不匹配,则可能会在投射到父类型时影响您的动态编程。 – ps2goat