您可以获得一些灵活性,具体取决于您在派生类中声明 ToString() 方法的方式。
public class MyBase
{
public override string ToString()
{
return "I'm a base class";
}
}
public class MyFixedChild : MyBase
{
public override string ToString()
{
return "I'm the fixed child class";
}
}
public class MyFlexiChild : MyBase
{
public new string ToString()
{
return "I'm the flexi child class";
}
}
public class MyTestApp
{
public static void main()
{
MyBase myBase = new MyBase();
string a = myBase.ToString(); // I'm a base class
MyFixedChild myFixedChild = new MyFixedChild();
string b = myFixedChild.ToString(); // I'm the fixed child class
string c = ((MyBase)myFixedChild).ToString(); // I'm the fixed child class
MyFlexiChild myFlexiChild = new MyFlexiChild();
string d = myFlexiChild.ToString(); // I'm the flexi child class
string e = ((MyBase)myFlexiChild).ToString(); // I'm a base class
}
}
'override' 关键字将锁定 ToString 方法,因此即使您转换回基类,它也将始终使用函数的派生版本。
'new' 关键字将允许您通过转换回基类来访问基类版本。