在类中调用重载扩展方法

时间:2016-10-19 14:20:05

标签: c# extension-methods method-resolution-order

请考虑以下代码:

class Program
{
    static void Main(string[] args)
    {
        var t = new Test();
        t.ToString();

        Console.WriteLine(t.ToString());
        Console.ReadKey();
    }
}

public class Test
{

}

public static class TestHelper
{
    public static string ToString(this Test test)
    {
        return "HashValue of test instance: " + test.GetHashCode();
    }
}

如何调用我的重载(至少VS告诉我ToString()+1 overload)扩展方法?由于Testobject继承(沿.NET Framework afaik中的所有类)。类object的实现ToString()会返回<namespace-wher-the-class-is-locatet.<class-name>之类的内容。 但是,如果我想ToString()我自己的实现不需要其他参数呢?

不,我不想在课堂上实施ToString()。我想把它作为一种扩展方法。 (类似于SecureString的扩展,将其从非托管,加密转换为托管,解密)

提前致谢!

1 个答案:

答案 0 :(得分:3)

您应该直接调用它,并且无法更改它,因为方法解析选择实例成员而不是扩展方法。

TestHelper.ToString(t)