重载函数静态方法错误

时间:2012-10-30 04:47:17

标签: c# overloading

我正在经历一个下面的例子

class Program
{
    public static void Show(String pstrMessage)
    {
        Console.WriteLine(pstrMessage);
    }
    public void Show(Object obj)
    {
        Console.WriteLine(obj.ToString());
    }
    static void Main(string[] args)
    {
        Program program=new Program();
        program.Show("Test Message");
    }
}

当我删除静态函数时它工作正常。
其他方面它给我一个编译时错误。
无法在非静态上下文中访问静态方法“show”。
因为我认为对象是所有人的基类,所以它应该自动地类型化为对象(隐式的阵型)。
任何人都可以解释为什么会出错。


感谢

3 个答案:

答案 0 :(得分:3)

Show(Object)没有理由成为非静态成员函数。也声明函数static

然后,您需要使用Program.Show(使用类名)而不是program.Show(使用实例名称),因为您正在调用静态函数。

答案 1 :(得分:3)

当多个方法名称匹配时,编译器会运行重载解析过程以确定哪个方法更具体。在您的情况下,静态重载恰好是最具体的,因为它需要string而不是object。编译器抱怨您应该使用Program.Show("Test Message");

来调用它

答案 2 :(得分:0)

如果你想使用实例函数,只需使用program.Show((Object)“Test Message”);