正如标题所说,我需要实现一个单例类数组。 我的项目构想是构建一个用Microsoft Visual C#编写的简单的PLC-Ladder 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.
问题是我无法在我的类之间创建和共享“Components”数组的实例。我发现了“单身模式”,但我还是无法正确实现它。我无法初始化我的“单例”类数组。这是代码(不相关的部分被删除)。
//Custom method.cs
namespace AVR_PLC
{
class CustomMethods
{
CustomEventHandlers extHandlers;
SharedVariables Variables;
public void setup()
{
extHandlers = new CustomEventHandlers();
Variables = new SharedVariables();
for (int i = 0; i < Variables.maxX; i++)
for (int j = 0; j < Variables.maxY; j++)
Variables.pBuffer[i, j] = new Components;
}
---------------------------------------------
//SharedVariables.cs
namespace AVR_PLC
{
class SharedVariables
{
public int maxX = 10;
public int maxY = 100;
public Components[,] pBuffer = Components[10, 100]; //Panel buffer
}
}
---------------------------------------------
//Components.cs
namespace AVR_PLC
{
public class Components
{
//***** Singleton pattern implementation ***********
//Private static object.
private static volatile Components instance;
private static readonly object mutex = new Object();
//Private constructor to prevent object creation.
private Components()
{
}
//Public property to access outside of the class to create an object.
public static Components Instance
{
get
{
if (instance == null)
lock (mutex)
if (instance == null)
instance = new Components();
return instance;
}
}
//************************************************
private string _name = "Default name";
public string Name
{
get { return this._name; }
set { this._name = value; }
}
public void reset()
{
_name = "Default name";
}
}
}
答案 0 :(得分:0)
单例是一个只有一个实例的类(就个人而言,使用C#时我更喜欢静态类而不是单例)。
要访问单件类,请使用Components.Instance
属性。但是,在你的情况下,你实际上并不想要一个单身人士
如果你想要一个Component对象数组,你宁愿为数组中的每个新对象创建一个新对象,否则该数组有点无用(如果它与它完全相同的对象......)。
要在同一个类的多个实例之间共享变量,请使用static
关键字,这基本上使其成为所有类中的相同对象(如果您将其更改为一个,则会全部更改)。 />
所以你可以让你的共享变量类成为一个静态类:
public static class SharedVariables
{
public static int maxX = 10;
public static int maxY = 100;
public static Components[,] pBuffer = Components[10, 100];
}
无论您访问SharedVariables类的哪个位置都可以访问它们。
但最重要的问题是:你真的需要静态SharedVariables
课程吗?我有点怀疑你在这里有设计问题需要考虑。