Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中在类之间共享数据的最佳方法#_C#_Resources - Fatal编程技术网

C# 在C中在类之间共享数据的最佳方法#

C# 在C中在类之间共享数据的最佳方法#,c#,resources,C#,Resources,我正在尝试编写一个windows窗体应用程序。我有一些按钮,我需要根据变量的状态更改按钮的图像。我将图像放在Resources文件夹中,并尝试按如下方式访问它们: public class MyImages { public static Image im = Properties.Resources.green; } Image newImage = MyImages.im; Image im=Properties.Resources.green 仅使用“im”变量名,如何从项目中

我正在尝试编写一个windows窗体应用程序。我有一些按钮,我需要根据变量的状态更改按钮的图像。我将图像放在Resources文件夹中,并尝试按如下方式访问它们:

public class MyImages
{
    public static Image im = Properties.Resources.green;
}
Image newImage = MyImages.im;
Image im=Properties.Resources.green


仅使用“im”变量名,如何从项目中的所有类中获得该值?

您要查找的是一个简单的全局变量,但它们在C#中没有。一个简单的替代方法是创建一个名为MyImages(或其他名称)的类,然后将“im”设置为静态公共字段,如下所示:

public class MyImages
{
    public static Image im = Properties.Resources.green;
}
Image newImage = MyImages.im;
然后,您可以从项目中的任何位置使用如下代码访问“im”:

public class MyImages
{
    public static Image im = Properties.Resources.green;
}
Image newImage = MyImages.im;

一些程序员可能会害怕这样的事情,坚持使用“依赖注入”或适当的单例,或者将“im”设为私有并创建get/set公共属性,或者诸如此类的东西。但是,如果您确实需要从代码中的任何位置访问此映像,这是一种简单而有效的方法,它可以实现将代码保留在一个位置以生成映像的目标。

您可以尝试使用ResourceManager:

ResourceManager rm = new ResourceManager("items", Assembly.GetExecutingAssembly());

要了解更多信息,请查看

我只需获取一次图像并将其传递给任何需要它的人。这样更灵活。@Joren:好吧,好吧,但是如何传递,从哪里传递,准确地说?在我的代码示例中,图像只从资源中提取一次,然后通过调用“MyImages.im”可供项目中的任何代码使用。我会让表单在其构造函数中获取图像,并将其存储在私有字段中。然后,表单中定义的任何事件处理程序都可以直接使用它。如果作为表单子控件的自定义控件需要访问图像,我会将其传递给其构造函数中的该控件。这是一些传递,但它确保您可以使用不同的映像重用代码的任何部分,而无需进行任何额外的更改。感谢您的所有回复。我像MusiGenesis说的那样写了这门课,效果很好。如果有更好的方法,请告诉我。