【发布时间】:2013-07-01 14:58:00
【问题描述】:
我有一个自定义类结构如下。
public interface Stuff { }
public Thing : Stuff
{
public new String ToString() { return "That's the thing!"; }
}
然后,在我的代码的其他部分,我有一个将 String 对象作为参数的方法。第一行编译,而第二行不编译。我认为发送对象时默认调用 ToString 。而 Stuff,从 Object 类继承应该已经实现了 ToString(在我的例子中,也被 my 实施)。
Thing thing = new Thing();
MustHaveString(thing.ToString());
MustHaveString(thing);
我错过了什么?
【问题讨论】:
-
为什么要声明一个 new
ToString方法而不是覆盖现有的方法?哎呀! (但不,ToString 通常不会自动调用。) -
@JonSkeet 因为根据the internet,override 可以用在 virtual 方法和 ToString 中i>对象不是。
-
@KonradViltersten
ToString是虚拟的。 -
您的问题不清楚。所有引用类型的对象都派生自对象,因此所有这些对象都有一个
ToString方法。当您创建复杂类型时,ToString方法的作用通常是输出调用对象的类名(因为它没有被覆盖)。那你哪里有问题? :) -
ToString肯定是virtual。见the documentation
标签: c# object-oriented-analysis