0

我正在通过下面的示例

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”。
因为我认为对象是所有人的基类,所以它应该自动类型转换为对象(隐式类型转换)。
谁能解释为什么它会出错。


谢谢

4

3 回答 3

3

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

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

于 2012-10-30T04:49:36.760 回答
3

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

于 2012-10-30T04:51:18.950 回答
0

如果要使用实例函数,只需使用 program.Show((Object)"Test Message");

于 2012-10-30T05:21:28.230 回答