【发布时间】:2016-04-09 00:10:51
【问题描述】:
请看下面的例子:
using System;
class MyClass
{
static int count = 0;
int id;
public MyClass()
{
id = count;
count++;
}
public override string ToString()
{
return "MyClass object #" + id;
}
}
class Test
{
static void Main()
{
MyClass ob1 = new MyClass();
MyClass ob2 = new MyClass();
MyClass ob3 = new MyClass();
Console.WriteLine(ob1);
Console.WriteLine(ob2);
Console.WriteLine(ob3);
}
}
程序的输出如下所示:
MyClass 对象 #0
MyClass 对象 #1
MyClass 对象 #2
正如您在此处看到的,方法 ToString() 在名为“MyClass”的类中被覆盖,但“MyClass”不是从任何类派生的,根本不存在继承。如果不涉及继承,如何使用“覆盖”?
如果我们将 ToString() 更改为任何其他方法名称说 'HelloString()',如下面的代码 sn-p:
public class Program
{
public static void Main(string[] args)
{
MyClass ob1 = new MyClass();
MyClass ob2 = new MyClass();
MyClass ob3 = new MyClass();
Console.WriteLine(ob1);
Console.WriteLine(ob2);
Console.WriteLine(ob3);
}
}
class MyClass
{
static int count = 0;
int id;
public MyClass()
{
id = count;
count++;
}
public override string HelloString()
{
return "MyClass object #" + id;
}
}
编译器抛出错误:'没有找到合适的方法来覆盖'
为什么使用 'ToString()' 方法会出现这种特殊行为?
【问题讨论】:
-
你继承自object。
标签: c# inheritance tostring