1

我正在创建一个类,植物。从这个类将创建许多对象。每个对象都需要包含植物的 BitmapImage。

然而,只有大约 20 种不同的植物。而不是成千上万的对象每个都包含一个 BitmapImage,是否可以有一个指针返回到不同的植物 BitmapImages 之一?我想这会节省很多内存。

第一:这是个好主意吗?其次,我将如何实现这一点?

4

2 回答 2

2

这不仅是一个好主意,而且是最佳实践。但是,由于您使用的是 C#,因此请使用引用而不是指针,好吗?

创建一个具有Bitmap 类的私有实例的类。给类一个带有访问器的公共属性get以返回该私有实例。

现在,任何需要使用该实例的人都可以简单地引用您创建的属性。您可以通过持有类的实例来提供它,或者您可以选择静态的东西。

请记住,Bitmap每个图像都需要一个实例(然后您可以使用像字典这样的数据结构来对它们进行分组),并且如果您对位图进行更改,它将影响使用它的每个人。

于 2013-06-06T17:56:48.513 回答
1

首先,在不安全上下文之外,C# 中没有指针。这是有关如何执行此操作的建议。

在字典中加载 20 个不同的植物图像。使其成为 Plant 类中的静态属性。在每个实例中都有一个string[] keys属性。这是一个数组,其中包含实例应显示的图像的键(如果它们仅限于一个图像,则将其设为单个字符串)。当一个实例需要显示它的图像时,可以从类中检索它BitmapImage toDisplay = Plant.Images[myInstance.keys[0]]或具有这种效果的东西。

这允许您在类级别仅存储一次非常植物的图像。由于所有实例共享相同的图像库,因此将其作为类本身的静态属性。如果一个实例需要它的图像,它会从类图像库中获取。它只存储应该显示哪些图像的键。这为您提供了类似于“每个实例都有一个指向它将显示的图像的单例”的内存配置文件,但其方式更符合 C#。

于 2013-06-06T17:56:07.893 回答