我如何能够从继承的类中覆盖一个字符串?

时间:2013-06-14 14:57:57

标签: c# inheritance override

我有一个继承自另一个的类,这两个类都将显示在列表框中并在列表框中显示一个字符串,这与父类中显示的不同

目前,这是来自子类

的覆盖
public override string ToString()
    {   //Return a String representing the object


        return name + " " + address + " " + Arrivaltime1 + " " + DeliveryName1 + " " + DeliveryDest;

    }

编辑:

仔细检查代码后。事实证明我没有将子类设置为公共

1 个答案:

答案 0 :(得分:1)

您可以获得一些灵活性,具体取决于您在派生类中声明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'关键字允许您通过强制转换回基类来访问基类版本。