C# 指向类中BitmapImage的指针

C# 指向类中BitmapImage的指针,c#,class,pointers,bitmapimage,C#,Class,Pointers,Bitmapimage,我正在创建一个类,植物。将从此类创建许多对象。每个对象都需要包含植物的位图图像 然而,只有大约20种不同的植物。与数千个对象(每个对象包含一个位图图像)不同,是否可以将指针返回到一个不同的plant位图图像?我想这会节省很多内存 第一:这是个好主意吗? 其次,我将如何实现这一点?首先,在不安全的上下文之外,C#中没有指针。这里有一个如何做的建议 将20种不同的植物图像加载到字典中。使其成为Plant类中的静态属性。在每个实例中,都有一个string[]keys属性。这是一个数组,其中包含实例应该

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

然而,只有大约20种不同的植物。与数千个对象(每个对象包含一个位图图像)不同,是否可以将指针返回到一个不同的plant位图图像?我想这会节省很多内存

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

首先,在不安全的上下文之外,C#中没有指针。这里有一个如何做的建议

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


这允许您在类级别仅存储一次植物图像。由于所有实例都共享同一个映像库,因此它使之成为类本身的静态属性。如果一个实例需要它的映像,它将从类映像库中获取。它只存储应该显示的图像的键。这为您提供了一个类似于“每个实例都有一个指向它将显示的图像的单例的指针”的内存配置文件,但在某种程度上更符合C#。

这不仅是一个好主意,也是一个好主意。既然您使用的是C#,那么就使用引用而不是指针,好吗

创建具有的私有实例的类。为类指定一个带有
get
acessor的公共属性,以返回该私有实例

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


请记住,每个图像都需要一个
Bitmap
实例(然后可以使用类似于a的数据结构对它们进行分组),如果对位图进行更改,将会影响到所有使用它的人。

听起来实现Flyweight设计模式在这里可能很有用。退房:谢谢你的链接;我可能会在其他地方实现类似的东西。这是一个非常好的解决方案。每个植物都有3个指向3个不同位图图像(年轻、中等、成年)的指针(对不起,参考)。在运行时,它将获取正确的图像并显示。例如,使用字典比使用数组BitmapImage PlantPix[20,3]有优势吗?或者植物对象的每个实例化都会自动抓取所有60个位图吗<代码>字典其中键是字符串,值是位图图像。字典只是对所有位图进行分组的一种方式。例如,使用字典是否比使用数组BitmapImage PlantPix[20,3]有优势?或者一个Plant对象的每个实例化都会自动抓取所有60个位图吗?字典将允许您通过您设置的任意键检索给定位图。它只是比通过几个索引进行访问更灵活,但除此之外,mroe没有多少优势。从字典中检索的示例:
Bitmap b=PlantPix.Dictionary[“成人芦荟”](与位图b=PlantPix.arrayOfPlants[10,1];
,例如比较)。刚刚休息一下,去了商店,顿悟了一下。我可以看到字典的威力,因为我假设我可以连接将用作键的字符串。因此,Plants.Name+Plants.Age(芦荟成人)可以用作位图的键。很不错的。谢谢