【问题标题】:Passing a string as parameter传递一个字符串作为参数
【发布时间】:2018-12-15 00:42:40
【问题描述】:

我目前正在使用 c# 开发一款游戏,但出现了一个让我陷入困境的问题。问题是,我不知道如何才能打印出字符串“sprite”的分配值。我正在开发的游戏将为 sprite 字符串分配多个值,这就是为什么我不只是在声明字符串时为其分配一个值。

为简单起见,我将场景简化为更简单的示例。

    class Program
{
    static void Main(string[] args)
    {
        Player p;
        p = new Player();
        Console.Read();
    }
}

class GameObject
{
    public GameObject(string spriteName)
    {
        Console.WriteLine(spriteName);
    }
}

class Player : GameObject
{
    public static string sprite;

    public Player() : base(sprite)
    {
        sprite = "Test";
    }
}

}

【问题讨论】:

  • 请注意,使用new Player 完全违背了 Unity 的思维方式,应该永远这样做。你不newGameObjects
  • 恕我直言,您应该public static string sprite = "Test"。您正在查看的行为是基于构造函数的执行顺序。
  • “为简单起见,我将场景简化为一个更简单的示例”这正是说明问题的最佳方式。让它尽可能简单。

标签: c#


【解决方案1】:

这里的问题是base构造函数在派生类构造函数之前被调用,所以sprite的值当时是null

解决此问题的最简单方法可能是在 sprite 字段初始化时为其提供默认值(并可能将其从实例构造函数中删除,除非您始终希望静态字段在以下情况下重置为默认值实例构造函数被调用)。

另外,请注意,如果它的值不应该改变,您可以将其设为 const

附注——public 字段在 c# 中通常为 PascalCase

class Player : GameObject
{
    public static string Sprite = "Test";

    public Player() : base(Sprite)
    {
    }
}

【讨论】:

  • 感谢您的简单解释!我真的只需要为该字段设置一个默认值来解决问题。
【解决方案2】:

将值分配给sprite之前的base constructor gets called,因此您正在调用base(null)

【讨论】:

  • 是的。他也可以为他在那里的静态字段引入static 构造函数,因此:static Player() { sprite = "Test"; } public Player() : base(sprite) { } 或者(等效地)他可以只初始化声明它的字段。 编辑:然后他还可以考虑将字段设为static readonlyconst(在最后一种情况下,“初始化”必须在声明中)。
  • 您指出了问题,我建议您编辑答案并添加解决方法,或者将您的链接作为问题中的“相关问题”评论。
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
相关资源
最近更新 更多