Я хочу создать класс static или singleton, который принимает ссылку на другой объект в своем конструкторе. Статические классы отсутствуют, но я решил, что могу создать синглтон, который принимает параметры в своем конструкторе. До сих пор мне не удавалось выяснить, что такое синтаксис. Это возможно? если да, то как мне это сделать?
Извините за отсутствие примера в начальном посте, я написал его в спешке. У меня такое ощущение, что мой ответ уже находится в ответах, но вот некоторые разъяснения того, что я хочу сделать:
Я хочу создать один экземпляр определенного типа (упомянутый Singleton), но этот единственный экземпляр типа должен содержать ссылку на другой объект.
Например, мне может понадобиться создать класс Singleton "Status", которому принадлежит объект StringBuilder и метод Draw(), который можно вызвать для записи упомянутого StringBuilder на экран. Метод Draw() должен знать о моей GraphcisDevice для рисования. Итак, что я хочу сделать это:
public class Status
{
private static Status _instance;
private StringBuilder _messages;
private GraphicsDevice _gDevice;
private Status(string message, GraphicsDevice device)
{
_messages.Append(message);
_gDevice = device;
}
// The following isn't thread-safe
// This constructor part is what I'm trying to figure out
public static Status Instance // (GraphicsDevice device)
{
get
{
if (_instance == null)
{
_instance = new Status("Test Message!", device);
}
return _instance;
}
}
public void UpdateMessage
...
public void Draw()
{
// Draw my status to the screen, using _gDevice and _messages
}
}
Всюду по коду я получаю свой статус Singleton и вызываю его метод UpdateMessage().
private Status _status = Status.Instance; // + pass reference to GraphicsDevice
_status.UpdateMessage("Foo!");
Затем в моем основном классе я также извлекаю синглтон и рисую его:
_status.Draw();
Да, это означает, что везде, где я получаю синглтон, мне нужно сделать это, передав ссылку на GraphicsDevice, в случае, если я впервые создам Singleton. И я мог бы использовать различные средства для получения чего-то столь же фундаментального, как GraphicsDevice в моем классе Singleton, например, зарегистрировать службу в другом месте и получить эту службу в классе Status. Этот пример очень надуманный - я пытаюсь понять, возможно ли что-то вроде этого шаблона.