Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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#_Arrays_Class_Singleton_Shared - Fatal编程技术网

C# 单例类数组

C# 单例类数组,c#,arrays,class,singleton,shared,C#,Arrays,Class,Singleton,Shared,正如标题所说,我需要实现一个单例类数组。 我的项目想法是用Microsoft Visual C#编写一个简单的PLC梯形图IDE。 因为我不是一个专业的代码编写者,我在一个文件中编写了大部分代码。它工作正常,但不容易阅读和更新。所以我把它分成五个不同的班 MainClass.cs - Main program CustomMethods.cs - All my methods CustomEventHandlers.cs - All my event handlers Compone

正如标题所说,我需要实现一个单例类数组。 我的项目想法是用Microsoft Visual C#编写一个简单的PLC梯形图IDE。
因为我不是一个专业的代码编写者,我在一个文件中编写了大部分代码。它工作正常,但不容易阅读和更新。所以我把它分成五个不同的班

MainClass.cs - Main program  
CustomMethods.cs - All my methods  
CustomEventHandlers.cs - All my event handlers  
Components.cs - This class holds information (name, type, input, output, etc) and I need a 2-D array of this, because I'm using it as a "screen buffer" for the project.  
SharedVariables.cs - All my variables are declared here. My components class is initialized as a 2-D array in here too.  
问题是我不能在我的类之间创建和共享“组件”数组的实例。我发现了“单例模式”,但仍然无法正确地实现它。我无法初始化我的“singleton”类数组。这是代码(不相关的部分被删除)

//Custom method.cs
名称空间AVR_PLC
{
类自定义方法
{
CustomEventHandlers和extHandlers;
共享变量;
公共作废设置()
{
extHandlers=新的CustomEventHandlers();
变量=新的SharedVariables();
对于(int i=0;i
单例类是一个只有一个实例的类(就个人而言,在使用C时,我更喜欢静态类而不是单例类)

要访问singleton类,可以使用
Components.Instance
属性。但是,在您的情况下,实际上并不需要singleton。
如果您想要一个组件对象数组,您更希望为数组中的每个新对象创建一个新的数组,否则该数组就有点无用(如果数组中的对象完全相同…)

要在同一类的多个实例之间共享变量,可以使用
static
关键字,这基本上使它在所有类上都是同一个对象(如果在一个类中更改它,它在所有类中都会更改)。
因此,您可以将共享变量类设置为静态类:

public static class SharedVariables
{
    public static int maxX = 10;
    public static int maxY = 100;
    public static Components[,] pBuffer = Components[10, 100];
}
无论您在哪里访问SharedVariables类,都可以访问它们


但最大的问题是:你真的需要一个静态的
SharedVariables
类吗?我有点怀疑你这里有一个设计问题要考虑。

单例数组听起来像是一个矛盾。单例的目的是你只有一个类的实例。制作一个这样的数组似乎很奇怪。我怎么能有一个单例呢多个类之间共享的类数组的数目?这是我的问题。我上面代码中的类被缩短了。它包含更多变量(类型、输入、输出、注释等)你真的需要学习面向对象编程。你写的是上帝对象反模式。我不熟悉面向对象编程。我是通过尝试和测试学习的(我应该先学习它,哈?:P)。我最初的问题是在类之间共享类数组的实例。“单例模式”对我来说是新事物。我知道它不超过几个小时。我现在明白我上面写的是一个悖论。:d问题是我的SharedVariable类中有很多变量。我应该到处使用static关键字吗?我想我看到了类的静态构造函数。我不确定。有这样的事情吗存在?有一个静态构造函数是的。如果你不想使用所有的静态属性,你可以将你的SharedVariables类变成一个单例,但就我个人而言,我会考虑这个类是否应该存在,变量是否不应该放在其他类中并保持私有。不过,我不能肯定这一点,因为我还没有看到全部代码:PSo基本上就是您“需要”的全部使当前代码正常工作的方法是在
SharedVariables
类而不是
Components
类上实现
singleton模式,然后通过
SharedVariables.Instance.Property;
而不是
SharedVariables.Property
访问它;我在C编码中使用。在C中,我可以制作一个头文件在C#中,我无法创建.h文件。唯一接近标题的方法是创建另一个类。这就是“SharedVariable”的目的所以我把我的组件类变成了静态的,并在SharedVariables上实现了singleton模式。让我试试这个。谢谢你的帮助。
public static class SharedVariables
{
    public static int maxX = 10;
    public static int maxY = 100;
    public static Components[,] pBuffer = Components[10, 100];
}