静态引用'这个'没有实例化类的实例的类的实例?

时间:2015-04-02 08:26:54

标签: c# unity3d static

我在Unity3D中用C#编程,当我遇到类似的代码时,我正在学习对象池:

public class MyClass : Object
{
    public static MyClass current;

    void Awake()
    {
        current = this;
    }

    public void SomeMethod()
    {

    }
}

public class Other
{
    void AnotherMethod()
    {
        MyClass.current.SomeMethod();
    }
}

现在类MyClass是非静态的,但是对它的实例'this'的引用'current'是(静态的)。 我可以通过在其他类中使用静态引用“current”到'this'实例来调用公共非静态方法并访问所有其他公共非静态变量。

但是如果我从未创建过类MyClass的实例,那么静态引用指向什么?

2 个答案:

答案 0 :(得分:1)

Class有一个静态字段,其中包含对其自身的单个实例的引用。如果您尝试从课程Other访问它而未指定current的有效值,则会获得NullReferenceException

可以在任何地方创建实例(因为它是公共静态字段),例如在某些启动代码中。使用单例模式,该类将具有私有构造函数和GetInstance(或GetCurrent)方法,该方法在调用类时创建类的实例,并且current为null。 / p>

如果没有实例,则无法调用Awake(),因此可能会将其初始化为:

static void Main()
{
    // without this call, x.AnotherMethod will throw an exception.
    new Class().Awake();

    var x = new Other();
    x.AnotherMethod();
}

应尽可能避免给定的模式,因为它具有全局变量的含义。您无法确定current字段指向哪个实例。如果类Class没有内部状态,则可以将其标记为静态,并仅显示静态方法。

答案 1 :(得分:0)

它将指向任何内容,因此它将抛出一个空引用异常