Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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“new()分配返回null或”;0“;_C#_Memory_Allocation - Fatal编程技术网

C# C“new()分配返回null或”;0“;

C# C“new()分配返回null或”;0“;,c#,memory,allocation,C#,Memory,Allocation,我在另一个类中声明了一个静态变量。该类声明它: public class BaseClass : MonoBehaviour { // Static so should only allocate once public static SubClass m_subObj = new SubClass(); } 我曾尝试在“lock(object)”中支撑分配,但m_subObj始终为null。我已经包括了一些代码,显示解锁版本 下面是它的代码: public class Bas

我在另一个类中声明了一个静态变量。该类声明它:

public class BaseClass : MonoBehaviour
{ 
   // Static so should only allocate once
   public static SubClass m_subObj  = new SubClass();
}
我曾尝试在“lock(object)”中支撑分配,但m_subObj始终为null。我已经包括了一些代码,显示解锁版本

下面是它的代码:

public class BaseClass : MonoBehaviour
{ 
   // Static so should only allocate once
   public static SubClass m_subObj  = new SubClass();  
}

public class SubClass : BaseClass 
{

   void Start() 
   {
       if (m_subObj)
       {
         Debug.Log("SubClass:Start 1 - SubClass allocated");
         return;
       }

      // This will pass
      if (!m_subObj)
      {
         Debug.Log("SubClass:Start() 2 - Huh? Should be allocated");
         m_subObj = new SubClass();
      }

      // This will pass too
      if (!m_subObj)
      {
       Debug.Log("SubClass:Start() 3 - DOUBLE Huh? Should be allocated");
      }
}
我期望:

(运行它) 子类:开始1-已分配静态子类

但是得到:

(运行它) 子类:Start()2-嗯?应该分配 ? 子类:Start()3-DOUBLE-Huh?应该分配

出于某种原因,它不喜欢对象的new()。 AddComponent()仍然有效。某物 将静态类更改为 个别实例

Foo=gameObject.AddComponent<Bar>() as Bar;
Foo=gameObject.AddComponent()作为条形图;
谢谢大家的帮助。 干杯
Clancy

您无法比较
之类的引用!m_subObj
在c#.@DanielA.White中,
monobhavior
类有一个。不过,我不知道它应该在什么时候生成true或false。啊哈,隐式转换为
bool
确实会允许代码编译。这意味着基本上是一个“非空”测试。在单个AppDomain中,这应该可以。如果我们不能自己轻松运行代码,就很难判断……我建议将代码更改为显式地与
null
进行比较,部分原因是为了检查这是否有帮助(我不希望这样)部分原因是为了让不经常使用
单一行为的人更清楚地了解这个问题。我试图重现你的问题,但无法重现,所以有些事情你没有向我们展示或告诉我们。试着编写一个小而完整的程序来重现这个问题,并将它发布到你的问题中;