创建新实例时,类的参数返回null

克里斯汀·弗朗兹

在我的Item类中,我有这两个变量。

    public string ItemDescription
    {
        get { return itemDescription; }
        set { value = itemDescription; }
    }
    public string itemDescription;

我知道有两个相同的变量是多余的,但是我现在将它们用于调试目的。继承的每个Item都具有这样的构造函数。

    public Log()
    {
        //other stuff
        itemDescription = "A log.";
        ItemDescription = itemDescription;
    }

我像这样显示ItemDescription。

 if (item.ItemSlotRectangle.Contains(MousePosition) && item.ItemName != "empty")
            {
                spriteBatch.DrawString(font, item.ItemDescription, new Vector2(item.ItemSlotPosition.X, item.ItemSlotPosition.Y - 20), Color.Black);
            }

在某些时候这是可行的。创建项目并将其放在地面上时,我可以查看说明。但是,当我创建一个新项目并尝试查看描述时,在draw方法中的item.ItemDescription变量处出现了空错误。

我创建一个像这样的新商品。

            if (item.ItemSlotRectangle.Contains(mp) && item.ItemName != "empty")
            {
                Item newItem = new Item();
                newItem.ItemName = item.ItemName;
                newItem.Texture = item.Texture;
                newItem.ItemDescription = item.ItemDescription;

                return newItem;
            }

我的问题是,为什么纹理和名称有效,但为什么ItemDescription返回null?我想我不完全了解如何创建类的新实例。

编辑:我将尝试添加更多代码以使内容更加清晰,并描述我要执行的操作。每次创建一个新Item时,我都会遍历并列出并调用一个方法,该方法将在列表中返回该项目的输出。

            if (recipe.CheckForItemsNeeded(player) != null)
            {
                Output = recipe.Output;
                SetItemPositionInTable(Output);
            }

输出的类型为Item。应该使用SetItemPositionInTable方法绘制项目,以便我可以单击它并制作它。方法如下。

             for (int i = 0; i < CraftingTableItems.Count(); i++)
        {
            if (CraftingTableItems[i].ItemName == "empty")
            {
                CraftingTableItems[i].ItemName = output.ItemName;
                CraftingTableItems[i].Texture = output.Texture;
                break;
            }
            else if (CraftingTableItems[i].ItemName == output.ItemName)
            {
                break;
            }

            //fix this
            else if (CraftingTableItems[i].ItemName != "empty" && output.ItemName == "empty")
            {
                CraftingTableItems[i].ItemName = output.ItemName;
                break;
            }
        }

这种方法现在是一团糟,但这是另一个问题。在输入时,我意识到我忘记了if循环中的一行来设置描述...解决了问题:P

Codenheim
    set { value = itemDescription; }  // should be  itemDescription = value

这是向后的(在设置方法中赋值),应该是另一种方式。value是参数,而不是后备字段。因此,您的设置什么都不做,并且获得ItemDescription属性值的唯一方法是设置(小写)的构造函数itemDescription = "A log.";

public string ItemDescription
{
    get { return itemDescription; }
    set { itemDescription = value; }  // correct
}

在幕后,set {...}编译器将其重写为如下方法:

void set_ItemDescription(string value) { ... }

因此您的原始代码是分配给参数,而不是后备字段。

另外,由于itemDescription是属性的后备字段,因此构造函数具有多余的分配(ItemDescription = itemDescription)

public Log()
{
    //other stuff
    itemDescription = "A log.";
    ItemDescription = itemDescription;  // <--- redundant
}

另一个建议;除非显示的代码是工厂方法,否则应编写“复制”构造函数,或实现Clone()或Copy()方法,而不是从外部代码中显式复制对象属性。您的班级应该知道如何复制或实例化完全初始化的实例,并且只应在班级内或工厂中编写该代码。除非进行反序列化,否则即使复制另一个对象,构造函数或工厂也应产生一个完全初始化的对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Unity:在创建新的类实例时为Null

来自分类Dev

创建新实例时使用类方法

来自分类Dev

从现有实例创建新实例,新类实例更改现有类参数

来自分类Dev

创建新类时如何查看参数?

来自分类Dev

根据参数创建派生类的新实例

来自分类Dev

实例化新对象时如何传入类的参数?

来自分类Dev

创建新的子类对象时,是否存在超类实例?

来自分类Dev

类实例化时的NULL参数

来自分类Dev

类实例化时的NULL参数

来自分类Dev

每次将类的实例作为参数传递还是每次创建新的实例?

来自分类Dev

使用参数创建新的Powershell会话时保留$ null值

来自分类Dev

创建类实例时出错

来自分类Dev

LINQ选择在创建新对象时返回NULL

来自分类Dev

在mainactivity中创建新类的类实例时,我的应用程序崩溃

来自分类Dev

使用现有类的属性创建新类时,python如何实例化属性?

来自分类Dev

如何通过传递Object []而不是带有反射的参数列表来创建类的新实例

来自分类Dev

如何编写以片段类作为参数的方法,使我可以创建该片段的新实例?

来自分类Dev

从自定义类调用方法而不创建新实例,带有Int参数的IntegerLiterallConvertible错误

来自分类Dev

从参数类实例化新对象

来自分类Dev

在Python中,如果给出了错误的参数,则返回“ None”而不是创建新实例

来自分类Dev

Perl:使用函数返回类的新实例

来自分类Dev

PHP - 创建类的实例(数组参数)

来自分类Dev

如何创建现有类的新实例?

来自分类Dev

如何创建通用类型类的新实例

来自分类Dev

InvocationTargetException试图创建服务类的新实例

来自分类Dev

yii无法创建类的新实例

来自分类Dev

Typescript在类中创建新实例

来自分类Dev

创建类的实例会返回警告吗?

来自分类Dev

Python-创建新实例时如何处理错误的参数?

Related 相关文章

  1. 1

    Unity:在创建新的类实例时为Null

  2. 2

    创建新实例时使用类方法

  3. 3

    从现有实例创建新实例,新类实例更改现有类参数

  4. 4

    创建新类时如何查看参数?

  5. 5

    根据参数创建派生类的新实例

  6. 6

    实例化新对象时如何传入类的参数?

  7. 7

    创建新的子类对象时,是否存在超类实例?

  8. 8

    类实例化时的NULL参数

  9. 9

    类实例化时的NULL参数

  10. 10

    每次将类的实例作为参数传递还是每次创建新的实例?

  11. 11

    使用参数创建新的Powershell会话时保留$ null值

  12. 12

    创建类实例时出错

  13. 13

    LINQ选择在创建新对象时返回NULL

  14. 14

    在mainactivity中创建新类的类实例时,我的应用程序崩溃

  15. 15

    使用现有类的属性创建新类时,python如何实例化属性?

  16. 16

    如何通过传递Object []而不是带有反射的参数列表来创建类的新实例

  17. 17

    如何编写以片段类作为参数的方法,使我可以创建该片段的新实例?

  18. 18

    从自定义类调用方法而不创建新实例,带有Int参数的IntegerLiterallConvertible错误

  19. 19

    从参数类实例化新对象

  20. 20

    在Python中,如果给出了错误的参数,则返回“ None”而不是创建新实例

  21. 21

    Perl:使用函数返回类的新实例

  22. 22

    PHP - 创建类的实例(数组参数)

  23. 23

    如何创建现有类的新实例?

  24. 24

    如何创建通用类型类的新实例

  25. 25

    InvocationTargetException试图创建服务类的新实例

  26. 26

    yii无法创建类的新实例

  27. 27

    Typescript在类中创建新实例

  28. 28

    创建类的实例会返回警告吗?

  29. 29

    Python-创建新实例时如何处理错误的参数?

热门标签

归档