我正在经历一个下面的例子
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”。
因为我认为对象是所有人的基类,所以它应该自动地类型化为对象(隐式的阵型)。
任何人都可以解释为什么会出错。
感谢
答案 0 :(得分:3)
Show(Object)
没有理由成为非静态成员函数。也声明函数static
。
然后,您需要使用Program.Show
(使用类名)而不是program.Show
(使用实例名称),因为您正在调用静态函数。
答案 1 :(得分:3)
当多个方法名称匹配时,编译器会运行重载解析过程以确定哪个方法更具体。在您的情况下,静态重载恰好是最具体的,因为它需要string
而不是object
。编译器抱怨您应该使用Program.Show("Test Message");
答案 2 :(得分:0)
如果你想使用实例函数,只需使用program.Show((Object)“Test Message”);