CopyPaste статических методов и полей
От: Eldar9x  
Дата: 27.05.11 08:15
Оценка:
Допустим есть примерно такая схема:
    interface IStateGUI
    {
    }

    class GUIDisconnected: IStateGUI
    {
        private static GUIDisconnected Instance = null;
        private static Object Sync = new Object();
        public int Parameter { get; private set; }    
        
        private GUIDisconnected()
        {
        }

        private GUIDisconnected(int _parameter)
        {
            this.Parameter = _parameter;
        }

        public static GUIDisconnected GetInstance(int _parameter)
        {
            if (GUIDisconnected.Instance == null)
            {
                lock (Sync)
                {
                    if (GUIDisconnected.Instance == null)
                        GUIDisconnected.Instance = new GUIDisconnected(_parameter);
                }
            }

            return GUIDisconnected.Instance;
        }    
    }


Кроме GUIDisconnected есть еще куча классов, реализующих IStateGUI. Можно ли каким-нибудь способом избежать копипаста статических методов этого класса? Так как эти методы по сути будут различаться только идентификатором класса (GUIDisconnected). Пытался применить шаблоны, но как то не сложилось. Еще проблема в том, что Instance и Sync тоже статические, вобщем наследование тут как-то не катит...
int i;
i = (i++)+(i++);
cout << i;
Re: CopyPaste статических методов и полей
От: _FRED_ Черногория
Дата: 27.05.11 08:19
Оценка: 1 (1) +1
Здравствуйте, Eldar9x, Вы писали:

E>Кроме GUIDisconnected есть еще куча классов, реализующих IStateGUI. Можно ли каким-нибудь способом избежать копипаста статических методов этого класса? Так как эти методы по сути будут различаться только идентификатором класса (GUIDisconnected). Пытался применить шаблоны, но как то не сложилось. Еще проблема в том, что Instance и Sync тоже статические, вобщем наследование тут как-то не катит...


Попробуйте решить вашу задачу без синглетонов.
Help will always be given at Hogwarts to those who ask for it.
Re: CopyPaste статических методов и полей
От: Aen Sidhe Россия Просто блог
Дата: 27.05.11 08:22
Оценка: 2 (1)
Здравствуйте, Eldar9x, Вы писали:

E>Допустим есть примерно такая схема:


public static class Singleton<T>
{
  public static T GetInstance()....
}
С уважением, Анатолий Попов.
ICQ: 995-908
Re: CopyPaste статических методов и полей
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.11 12:02
Оценка: +1
Здравствуйте, Eldar9x, Вы писали:

E>Допустим есть примерно такая схема:

А какой смысл имеет такая схема?
В частности, для какой цели сделано так, что клиент не может полагаться на сохранение "очевидных" инвариантов вроде:
GUIDisconnected.GetInstance(42).Parameter == 42

?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: CopyPaste статических методов и полей
От: Eldar9x  
Дата: 31.05.11 09:34
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Eldar9x, Вы писали:


E>>Допустим есть примерно такая схема:

S>А какой смысл имеет такая схема?
S>В частности, для какой цели сделано так, что клиент не может полагаться на сохранение "очевидных" инвариантов вроде:
S>
S>GUIDisconnected.GetInstance(42).Parameter == 42
S>

S>?

Схема была приведена только, чтобы понять как в родителе сохранить статические методы и использовать их потом в наследниках.
Реальная схема даже проще. Там просто статическое поле объявлено:

public static GUIDisconnected Instance = new GUIDisconnected();


Ну так вот, сделал через шаблоны. Класс Родитель-Шаблон, который хранит статические поля и реализует интерфейс. И наследники этого класса. Никакого копипаста. А общее поле в родителе вообще инициализирую перед стартом.
int i;
i = (i++)+(i++);
cout << i;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.