访问一个单例返回(NullReferenceException)
问题描述:
我真的很笨,但我认为我是雪盲。从另一个优雅的调用中,我无法访问单例类方法。我得到了可怕的访问一个单例返回(NullReferenceException)
(NullReferenceException)。
这里是我的简单单身人士,以及我如何调用方法。
public class PlayerNodePosition : MonoBehaviour
{
public static PlayerNodePosition instance;
string code;
void Awake()
{
if (instance == null)
{
Debug.LogWarning("More than one instance of Inventory found!");
return;
}
instance = this;
}
public void AddCode(string _code)
{
code = _code;
}
}
这里是来自另一个脚本的调用者。
void AddCode()
{
PlayerNodePosition.instance.AddCode("Added!");
}
是一个“傻瓜”我很明显缺少明显的。
答
方法Awake
应该是静态的,并且应该设置实例。我没有机会检查这是否运行,因为我没有安装C#,但是您提供的调试日志警告在逻辑上是错误的。如果没有实例,则需要创建一个实例。如果有实例,则返回该实例。这是单身模式。
public class PlayerNodePosition : MonoBehaviour
{
public static PlayerNodePosition instance;
string code;
void static getInstance()
{
if (instance == null)
{
instance = new PlayerNodePosition();
}
return instance;
}
public void AddCode(string _code)
{
code = _code;
}
}
+0
神话般的,谢谢你的职位。我可以看到我缺少的东西。 – Wizz69
答
你不要实例instance
任何地方。你需要类似
private static PlayerNodePosition playerNodePosition;
public static PlayerNodePosition instance
{
get
{
if (playerNodePosition == null) {
playerNodePosition = new PlayerNodePosition();
}
return playerNodePosition;
}
}
+0
谢谢你Svet,我看到了我的方式的错误。 – Wizz69
除了答案,你可能会发现这篇文章:http://www.c-sharpcorner.com/UploadFile/8911c4/singleton-design-pattern-in-C-Sharp /有用的 – 4D1C70