1. C# / Говнокод #3489

    +117

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    void  makeGetSet(ref int delegate() get, ref void delegate(int)  set)
    {    
        int _data = 0;
        
        get = {return _data;};
        set = (int Data){_data = Data;};
    }

    Запостил: Говногость, 16 Июня 2010

    Комментарии (18) RSS

    • под веществами писали. инфа 99%.
      Ответить
    • Это популярный в своих кругах паттерн. инфа 0,01%. pushkoff афтар?
      Ответить
    • на пути к метапрограммингу, 50%
      Ответить
    • "ref int delegate() get, ref void delegate(int) set"
      -это что ? О.о
      Ответить
      • не компилируется C# 3.0

        может быть, это C# 4.0?
        Ответить
      • там, наверное, typedef нужен. В C# это как-то через using делается.
        Ответить
    • >int _data = 0;
      Мне кажеться, что здесь не хватает static.
      Ответить
      • В шарпе низя использовать модификатор static внутри методов.
        Ответить
    • Должно быть, вроде:
      get = delegate {return _data;};
      set = delegate (int Data){_data = Data;};
      Ответить
      • вообще-то

        get {return _data;}
        set {_data = value;}

        Сабж - какая-то вымышленная хрень, в C# например запрещено ставить точкую с запятой после }, УЖЕ не скомпилируется. Вряд ли в 4.0 поменяли правила

        Не говоря уже о ref void delegate(int) set

        Андерс Хейльсберг перевернулся в гробу (он в нём спит)
        Ответить
        • Автор где-то в другом треде признался, что переписывал их по памяти, тк дома этого кода не было.
          А вообще должно использоваться как-то типа:
          Получение 2х делегатов, а потом использование, как установка или получение значения переменной _data.
          Ответить
          • Хотя кому это нужно? Непонятно... Я не знаю таких паттернов. Может какая-то отложеная инициализация, хотя это будет верно только для _data с типом не int. Хотя, может там действительно не int, а автор забыл что там было.
            Ответить
            • >Я не знаю таких паттернов.

              Тогда всё, раз гест не знает -- код нежизнеспособен.
              Ответить
    • void makeGetSet(ref Func<int> get, ref Action<int>  set)
              {    
                  int _data = 0;
                  
                  get = ()=> {return _data;};
                  set = (Data)=>{_data = Data;};
              }


      вот так работает!!
      Ответить
      • Даже так:
        [code lang=C#]
        void makeGetSet(ref Func<int> get, ref Action<int> set)
        {
        int _data = 0;

        get = delegate { return _data; };
        set = delegate(int Data) { _data = Data; };
        }
        [code]
        Ответить
        • Это зачем? Говнопост решили использовать в своём проекте? Ну удачи. О_о
          Ответить

    Добавить комментарий