关于静态和非静态方法

时间:2016-10-20 09:05:06

标签: c# methods static non-static

我知道Static意味着变量或方法属于类本身,我们可以将它与ClassName.StaticMethodName一起使用。所以问题是:我们可以在另一个非静态方法中使用非静态方法,但我们不能在静态方法中使用非静态方法。我只是不明白为什么我们可以在另一个非静态方法中使用非静态方法?我们不需要一个对象来使用非静态方法吗?对于静态方法,我们需要使用类名,这就足够了。但是,为什么我们不需要对象来使用方法?例如:

//此代码不会生成任何错误。还有一些我不知道的东西?也许C#在methodB()之前添加一个隐藏的对象?

ClassA()
{
  public void methodA()
  {
    methodB();
  }
  public void methodB()
  {
  }
}

3 个答案:

答案 0 :(得分:5)

  

我只是不明白为什么我们可以在里面使用非静态方法   另一种非静态方法?

要调用非静态方法,您需要一个可以调用方法的对象实例。在此示例中,如果没有实例化的ClassA实例,则无法调用MethodA。

出于这个原因,我们知道如果我们在MethodA中,必须有一个现有的实例正在执行此函数。因此,调用MethodB是有效的,因为它是在MethodA当前正在运行的同一对象上调用的。

答案 1 :(得分:1)

Static基本上意味着您不必创建对象的新实例来使用其方法。

public static class ClassA
{
     public static void Run()
     {

     }
}

这可以像ClassA.Run(); 一样调用。

public class ClassB
{
     public void Run()
     {

     }
}

要执行Run,您需要执行以下操作:

ClassB b = new ClassB(); //Create a new Instance of type ClassB
b.Run();                

所以当你在ClassB中调用另一个在Run() this.AnyOtherMethod();内调用的方法时(this是多余的)将使用相同的实例Run()是从。

调用的

答案 2 :(得分:0)

例如,您有一个具有静态和非静态方法的类的情况:

public class A
{
    private int a;

    public A(int value)
    {
        this.a = value;
    }

    public static int MethodA()
    {
        return MethodB();
    }

    public int MethodB()
    {
        return a;
    }
}

想象一下,我们能够编译它,我们尝试使用这个类而不构造它(创建一个类的实例)。我们不知道' a'在运行时。因此我们不能在静态方法中使用实例方法。