哪个是更好的编程实践 - 不必要的参数或静态变量?
Which is better programming practice - Unnecessary parameters or a static variable?
我正在用 C# 和 XNA 4.0 制作游戏,我的一个 classes 需要它自己的纹理。 class 目前是这样使用的:
Class构造函数:
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);
但是,class 的每个新实例都需要相同的纹理(即每个参数值都将完全相同)。因此,这个参数感觉是不必要的。我正在考虑将构造函数更改为更像这样:
public Item() : base(MainClass.m_Texture) //This now takes a public static variable from the main game class
{
}
这消除了对参数的需要(我的代码更少),但我想知道这是否会导致其他问题,如性能和内存使用。
总体而言,哪个被认为是更好的编程实践?有几个 class 个实例都使用相同的参数值或将构造函数参数交换为静态变量?
为了性能,最好有一个静态变量并在类之间共享它。但通常性能影响接近 none,除非它是关键代码。 (关键代码是指在一秒钟内运行很多次的代码,例如 Update 方法,或导致应用程序出现瓶颈的代码)
否则,我建议在您的代码中使用感觉自然的东西。如果所有实例始终共享相同的纹理,那么很自然地为此使用一个变量,而不是多次复制它。
您可以将纹理设为单例。
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;
}
}
在您的 class 中然后执行此操作:
public Item() : base(TextureHolder.GetTexture()) //This now takes a public static variable from the main game class {}
这样,如果没有创建任何项目,则永远不会加载纹理。但如果创建了超过 2 个项目,您将只加载一次纹理并引用一次
我正在用 C# 和 XNA 4.0 制作游戏,我的一个 classes 需要它自己的纹理。 class 目前是这样使用的:
Class构造函数:
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);
但是,class 的每个新实例都需要相同的纹理(即每个参数值都将完全相同)。因此,这个参数感觉是不必要的。我正在考虑将构造函数更改为更像这样:
public Item() : base(MainClass.m_Texture) //This now takes a public static variable from the main game class
{
}
这消除了对参数的需要(我的代码更少),但我想知道这是否会导致其他问题,如性能和内存使用。
总体而言,哪个被认为是更好的编程实践?有几个 class 个实例都使用相同的参数值或将构造函数参数交换为静态变量?
为了性能,最好有一个静态变量并在类之间共享它。但通常性能影响接近 none,除非它是关键代码。 (关键代码是指在一秒钟内运行很多次的代码,例如 Update 方法,或导致应用程序出现瓶颈的代码)
否则,我建议在您的代码中使用感觉自然的东西。如果所有实例始终共享相同的纹理,那么很自然地为此使用一个变量,而不是多次复制它。
您可以将纹理设为单例。
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;
}
}
在您的 class 中然后执行此操作:
public Item() : base(TextureHolder.GetTexture()) //This now takes a public static variable from the main game class {}
这样,如果没有创建任何项目,则永远不会加载纹理。但如果创建了超过 2 个项目,您将只加载一次纹理并引用一次