哪个是更好的编程习惯 - 不必要的参数还是静态变量?

时间:2015-06-04 19:33:52

标签: c# parameters constructor static xna

我正在用C#和XNA 4.0制作一个游戏,我的一个类需要自己的纹理。该课程目前正在使用:

类构造函数:

class Item : ItemBase //It uses a base class
{
    public Item(Texture2D myTexture) : base(myTexure)
    {
    }
}

新实例:

Texture2D m_Texture = Content.Load<Texture2D>("Texture1");
Item m_item = new Item(m_Texture);

但是,该类的每个新实例都需要相同的纹理(即每个参数值都完全相同)。结果,该参数感觉不必要。我正在考虑将构造函数更改为更像:

public Item() : base(MainClass.m_Texture) //This now takes a public static variable from the main game class
{
}

这消除了对参数的需求(我的编码较少),但我想知道这是否会导致性能和内存使用等其他问题。

总的来说,这被认为是更好的编程实践?有几个类实例都使用相同的参数值或交换静态变量的构造函数参数?

2 个答案:

答案 0 :(得分:1)

你可以使纹理成为单一的。

class TextureHolder
{
    static private TextureHolder instance;
    private Texture2D texture;
    private TextureHolder()
    {
        texture = Content.Load<Texture2D>("Texture1");

    }

    public static GetTexture()
    {
         if(instance==null)
         {
              instance = new TextureHolder();

         }
         return instance;

    }

}

你班上的

然后这样做:

public Item() : base(TextureHolder.GetTexture()) //This now takes a public static variable from the main game class {}

这样,如果没有创建Items,则永远不会加载纹理。但是如果创建的项目超过2个,则只加载一次纹理并引用一次

答案 1 :(得分:0)

对于性能,最好有一个静态变量并在您的类之间共享。但通常情况下,性能影响几乎为零,除非它是关键代码。 (关键代码,我指的是在一秒钟内运行很多次的代码,例如 Update 方法,或导致应用程序出现瓶颈的代码)

否则,我建议您在代码中使用感觉自然的内容。如果所有实例始终共享相同的纹理,那么为此使用一个变量是自然的,而不是多次复制。