Sim*_*ons 3 .net c# oop static-methods
可能重复:
为什么我只能从静态函数访问静态成员?
当我试图从静态方法中调用普通方法时,我得到了错误:
非静态字段,方法或属性需要对象引用
所以这意味着我需要创建Class的对象然后调用nonstatic方法.如果我想直接调用该方法,那么我必须将该方法声明为Static.
但是,在这种情况下,调用方法和被调用方法属于同一个类.那么为什么我需要在从静态方法调用时创建对象,而我可以从非静态方法调用非静态方法.
例如:
class Program
{
//public void outTestMethod(int x,out int y)
//{
// y = x;
//}
static void Main(string[] args)
{
int a = 10;
int b = 100;
outTestMethod(a,out b);
}
private void outTestMethod(int x, out int y)
{
y = x;
}
}
Run Code Online (Sandbox Code Playgroud)
Error:An object reference is required for the non-static field, method, or property
静态方法可以调用实例方法 - 但是您需要有一个实例来调用它们.这个实例来自哪里并不重要,例如:
int a = 10;
int b = 100;
Program program = new Program();
program.outTestMethod(a,out b);
Run Code Online (Sandbox Code Playgroud)
实例方法与类型的特定实例相关联,而静态方法则与整体类型相关联 - 对于其他类型的成员也是如此.因此,要调用一个实例方法,你需要知道哪些你实例兴趣.例如,这将是毫无意义的有:
string name = Person.Name;
Run Code Online (Sandbox Code Playgroud)
因为你需要知道哪些你正在谈论的人:
Person person = FetchPersonFromSomewhere();
string name = person.Name;
Run Code Online (Sandbox Code Playgroud)
......这更有意义.
通常,实例方法使用或修改实例的状态.
这样考虑。
静态方法是电梯组外的按钮。任何人都可以看到它并推动它,并使某些事情发生(即其中一部电梯将到达该楼层)。
非静态方法是特定电梯内的按钮。他们操纵那部电梯(和其他电梯都没有)。