Как говорится в заголовках, мне нужно реализовать массив одноэлементных классов. Моя идея проекта заключается в создании простой PLC-Ladder IDE, написанной на Microsoft Visual C#.
Поскольку я не эксперт по написанию кода, я написал большую часть своего кода в одном файле. Он работал правильно, но читать и обновлять его было нелегко. Поэтому я разделил его на пять разных классов.Array of Singleton class
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», но все же я не могу его правильно реализовать. Я не могу инициализировать свой массив «singleton». Вот код (нерелевантные части вырезаны).
//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";
}
}
}
Array of Singleton звучит как противоречие. Цель singleton состоит в том, что у вас есть только один экземпляр класса. Создание массива кажется странным. – derpirscher
Как я могу получить один экземпляр массива класса, разделяемого между несколькими классами? Это моя проблема. Класс в моем коде выше сокращен. Он содержит больше переменных (тип, ввод, вывод, комментарий и т. Д.) – ThymiosK
Вам действительно нужно изучить объектно-ориентированное программирование. То, что вы написали, это God-Object Anti-Pattern –