0

想象以下示例:

class foobar
{
    string b = string.Empty;
    public foobar(string abc)
    {
        b = abc;    
    }
    public override string ToString()
    {
        return b;
    }
}

我可以这样使用它:

void Main()
{
    foobar test = new foobar("test string");
    Console.WriteLine(test);
}

随着预期的输出test string

如果我做这样的事情怎么办?

void Main()
{
    object test2 = (object)new foobar("test string 2");
    Console.WriteLine (test2);
}

test string 2即使我将我的类装箱在对象内,我仍然得到输出。

当我使用方法返回的对象时,它甚至可以工作:

private object DoSomething()
{
    return (object) new foobar("test3..");
}

CLR 如何知道我的对象是哪种类型以及在哪里寻找 .ToString() 实现?

这在跨装配边界使用时是否有效?

4

1 回答 1

2

ToString()在 Object 上可见并可通过 Object 访问。

提供方法的重写实现并在对象作为其祖先或基类访问时调用它是多态性的核心要求和好处。

指定覆盖会告诉对象的元数据将对祖先方法的调用重新映射到ToString()新方法,即使该对象被当作其祖先来访问。

于 2013-06-25T12:46:33.417 回答