您应该覆盖该ToString方法.
首先:Console.WriteLine接受object并调用ToString它的方法.
其次:在将来的某个时候,您可能需要创建类,派生自Message.我们来看看这个:
using System;
using System.IO;
namespace Namespace
{
class StringCastBase
{
public static explicit operator string(StringCastBase o)
{
return "string cast base";
}
}
class StringCastDerived : StringCastBase
{
public static explicit operator string(StringCastDerived o)
{
return "string cast derived";
}
}
class ToStringOverridenBase
{
public override string ToString()
{
return "ToString overriden base";
}
}
class ToStringOverridenDerived : ToStringOverridenBase
{
public override string ToString()
{
return "ToString overriden derived";
}
}
class Programm
{
public static void Main()
{
StringCastBase scb = new StringCastBase();
Console.WriteLine((string)scb);
StringCastBase scd = new StringCastDerived();
Console.WriteLine((string)scd);
ToStringOverridenBase tsob = new ToStringOverridenBase();
Console.WriteLine(tsob);
ToStringOverridenBase tsod = new ToStringOverridenDerived();
Console.WriteLine(tsod);
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出将是
串铸基地
串铸基地
ToString覆盖基础
ToString覆盖派生
由于静态类型scd是StringCastBase,StringCastBase将调用转换方法(即使动态类型不是StringCastBase).使用虚方法ToString解决了这个问题.
| 归档时间: |
|
| 查看次数: |
572 次 |
| 最近记录: |