Wie die Titel sagt, muss ich ein Array von Singleton-Klasse implementieren. Meine Projektidee baut eine einfache PLC-Ladder-IDE, die in Microsoft Visual C# geschrieben wurde.
Da ich kein Experte Code-Writer bin, schrieb ich einen großen Teil meines Codes in einer einzigen Datei. Es funktionierte einwandfrei, aber es war nicht einfach zu lesen und zu aktualisieren. Also habe ich es in fünf verschiedene Klassen aufgeteilt.Array der Singleton-Klasse
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.
Das Problem ist, dass ich nicht schaffen kann und eine Instanz von „Komponenten“ Array zwischen meinen Klassen teilen. Ich habe das "Singleton-Muster" gefunden, kann es aber immer noch nicht richtig implementieren. Ich kann mein Array der Singleton-Klasse nicht initialisieren. Hier ist der Code (irrelevante Teile werden ausgeschnitten).
//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 von Singleton klingt wie ein Widerspruch. Der Zweck von Singleton ist, dass Sie nur eine Instanz einer Klasse haben. Ein Array davon erscheint seltsam. – derpirscher
Wie kann ich eine einzelne Klasseninstanz für mehrere Klassen verwenden? Das ist mein Problem. Die Klasse in meinem Code oben ist verkürzt. Es enthält mehr Variablen (Typ, Eingabe, Ausgabe, Kommentar usw.) – ThymiosK
Sie müssen wirklich objektorientierte Programmierung lernen. Was Sie geschrieben haben, ist God-Object Anti-Pattern –