我想知道为什么在Main方法中总是需要一个对象引用来调用子类的方法.
但是我们可以Main通过其他方法的方法名称直接调用该方法:
using System;
class MainProgram : Parent_Class
{
static void Main(string[] args)
{
Project1_Child p = new Project1_Child();
p.PI_add(); //-> Object reference is required
}
public void non_Main_method()
{
PI_add(); //-> No Object reference is required
}
}
public class Parent_Class
{
public void PI_add()
{
Console.WriteLine("-------------");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
正如其他答案所述,您需要了解静态方法和实例方法之间的区别.这个答案的要点是让你走上正确的术语路径,并考虑调用实例方法.你说:
我想知道为什么在Main方法中总是需要一个对象引用来调用子类的方法.
让我们分解吧.
x = foo.Bar(123)你正在"发送一条消息"来foo了解你想要foo执行的计算,然后foo将结果发回给你x.this.MainProgram.这就解释了你的观察结果.
在Main你打电话PI_add.这是一个实例成员,所以它需要一个接收器作为实例.如果你是从一个实例成员调用,那么C#会假设你已经省略了this.,但是你是从一个静态成员调用的.因此接收器是必需的,忽略接收器是错误的.
在non_main_method,一个实例方法,你打电话PI_add.这是一个实例方法,因此假设省略了接收者this.
这足以让您走上更高效的道路.当您了解委托和扩展方法时,您会发现这里还有其他细微之处,关于接收器究竟是什么以及编译器如何处理它.