Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载函数静态方法错误_C#_Overloading - Fatal编程技术网

C# 加载函数静态方法错误

C# 加载函数静态方法错误,c#,overloading,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

我正在看下面的一个例子

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



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


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

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



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

当多个方法名匹配时,编译器运行重载解析过程来决定哪个方法更具体。在您的例子中,静态重载恰好是最具体的一个,因为它使用
字符串
,而不是
对象
。编译器抱怨您应该使用
Program.Show(“测试消息”)调用它

当多个方法名称匹配时,编译器运行重载解析过程以确定哪个方法更具体。在您的例子中,静态重载恰好是最具体的一个,因为它使用
字符串
,而不是
对象
。编译器抱怨您应该使用
Program.Show(“测试消息”)调用它

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

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

是的,你是对的,但我想知道为什么它会给我编译错误。“show method(object)”应该是静态的。区域是什么?您会收到一个错误,因为C#要求您在引用静态成员时使用类的名称(而不是实例)。删除静态方法时,您不再尝试调用静态方法!但我并没有指定要调用静态方法。因为我正在用一个实例调用这个方法?结论是什么?是的,你是对的,但我想知道为什么它会给我编译错误。“show method(object)”应该是静态的。区域是什么?您会收到一个错误,因为C#要求您在引用静态成员时使用类的名称(而不是实例)。删除静态方法时,您不再尝试调用静态方法!但我并没有指定要调用静态方法。因为我正在用一个实例调用这个方法?结论是什么?您的意思是编译器在调用静态或非静态方法方面不聪明吗?或者先查找重载,然后查找静态和非静态static@krshekhar编译器的工作是按照你说的去做,而不是按照它认为你想要的去做。编译器猜测您的意图,并静默地调用静态方法是不明智的,即使您的代码明确表示您希望调用实例方法。您的意思是编译器在调用静态或非静态方法方面不明智吗?或者先查找重载,然后查找静态和非静态static@krshekhar编译器的工作是按照你说的去做,而不是按照它认为你想要的去做。编译器猜测您的意图并静默地调用静态方法是不明智的,即使您的代码明确表示希望调用实例方法。这是调用函数的一种方式。我想知道为什么上面没有工作。在构建之后,每个函数都有它的地址。您希望调用函数Show(string),因此无法使用实例指针访问该函数。不熟悉C语言,但C++语言。下面的代码运行良好。类MyClass{public:void print(){coutt这是调用函数的一种方法。我想知道为什么上面的代码不起作用。生成后,每个函数都有其地址。是否要调用函数Show(string)不能用实例指针访问函数。不熟悉C,但C++。下面的代码工作well.class MyClass {public:无效打印({)}。