Дженерики как средство ителлектуальной обфускации кода :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.11.04 22:36
Оценка:
На досуге разбирался с тоностями парсинга явной реализации методов дженерик интерфейсов и породил следующую конструкцию:
using System;

namespace ConsoleApplication1
{
    class B<X>
    {
        public interface ITest1<T>
        {
            void Test<K>();
            int Prop { get; }
        }
    }

    class A : B<char>.ITest1<int>
    {
        void ConsoleApplication1.B<char>.ITest1<int>.Test<T>()
        {
            throw new NotImplementedException();
        }

        int B<char>.ITest1<int>.Prop
        {
            get { throw new global::System.NotImplementedException(); }
        }
        
        void B<Z>() { }
    }

    class Program
    {
        static void Main(string[] args)
        {
            B<char>.ITest1<int> a = new A();
            a.Test<string>();
        }
    }
}

После того как написал глянул на это дело еще раз и понял, что в умелых руках дженерики могут стать страшной разрушительной силой.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>

17.11.04 12:42: Перенесено из '.NET'
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Дженерики как средство ителлектуальной обфускации кода :
От: vdimas Россия  
Дата: 16.11.04 23:50
Оценка:
Здравствуйте, VladD2, Вы писали:


public interface ITest1<T>
VD>        {
VD>            void Test<K>();
VD>            int Prop { get; }
VD>        }


че-то не понял прикола,
метод в интерфейсе не зависит от параметра дженерика интерфейса?
как же тогда насчет обязательности имплементации членов интерфейса?
Re: Дженерики как средство ителлектуальной обфускации кода :
От: V.Petrovski Беларусь  
Дата: 17.11.04 07:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>
VD>        int B<char>.ITest1<int>.Prop
VD>        {
VD>            get { throw new global::System.NotImplementedException(); }
VD>        }
VD>

А вот это что за констукция?
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: Дженерики как средство ителлектуальной обфускации код
От: mikа Stock#
Дата: 17.11.04 08:34
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

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


VD>>
VD>>        int B<char>.ITest1<int>.Prop
VD>>        {
VD>>            get { throw new global::System.NotImplementedException(); }
VD>>        }
VD>>

VP>А вот это что за констукция?

алиас для пространства имен
Re[3]: Дженерики как средство ителлектуальной обфускации код
От: V.Petrovski Беларусь  
Дата: 17.11.04 08:38
Оценка:
Здравствуйте, mikа, Вы писали:

M>алиас для пространства имен


А что стало с алиасами для пространства имен C#1.0? Это пример объявления или использования?
... << RSDN@Home 1.1.4 @@subversion >>
Re: Дженерики как средство ителлектуальной обфускации кода :
От: GlebZ Россия  
Дата: 17.11.04 08:40
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>На досуге разбирался с тоностями парсинга явной реализации методов дженерик интерфейсов и породил следующую конструкцию:

VD>
VD>using System;

VD>namespace ConsoleApplication1
VD>{
VD>    class B<X>
VD>    {
VD>        public interface ITest1<T>
VD>        {
VD>            void Test<K>();
VD>            int Prop { get; }
VD>        }
VD>    }

VD>    class A : B<char>.ITest1<int>
VD>    {
VD>        void ConsoleApplication1.B<char>.ITest1<int>.Test<T>()
VD>        {
VD>            throw new NotImplementedException();
VD>        }

VD>        int B<char>.ITest1<int>.Prop
VD>        {
VD>            get { throw new global::System.NotImplementedException(); }
VD>        }
        
VD>        void B<Z>() { }
VD>    }

VD>    class Program
VD>    {
VD>        static void Main(string[] args)
VD>        {
VD>            B<char>.ITest1<int> a = new A();
VD>            a.Test<string>();
VD>        }
VD>    }
VD>}
VD>

VD>После того как написал глянул на это дело еще раз и понял, что в умелых руках дженерики могут стать страшной разрушительной силой.

Ежели описывать все имена объектов как A, B и так далее, то безусловно.
Если описывать через нормальные имена, то код будет достаточно понятен.
При правильном теоретическом подходе, и без generic можно сделать очень "красивый" код.

С уважением, Gleb.
Re[4]: Дженерики как средство ителлектуальной обфускации код
От: mikа Stock#
Дата: 17.11.04 08:43
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

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


M>>алиас для пространства имен


VP>А что стало с алиасами для пространства имен C#1.0?


Остались.

VP>Это пример объявления или использования?


Использование. global — это ключевое слово. Через него идет обращение к пространству имен, миную любые алиасы.
Re[5]: Дженерики как средство ителлектуальной обфускации код
От: V.Petrovski Беларусь  
Дата: 17.11.04 09:03
Оценка:
Здравствуйте, mikа, Вы писали:

M>Использование. global — это ключевое слово. Через него идет обращение к пространству имен, миную любые алиасы.

Мне стало это интерсно, т.к. в Commands для KeyBinding похожий использовался синтаксиси "Global::Ctrl+Shift+D,F"
... << RSDN@Home 1.1.4 @@subversion >>
Re: Дженерики как средство ителлектуальной обфускации кода :
От: Karabinos Украина  
Дата: 17.11.04 10:34
Оценка: +1
VD>
VD>namespace ConsoleApplication1
VD>{
VD>    class B<X>
VD>    {
VD>        public interface ITest1<T>
VD>        {
VD>            void Test<K>();
VD>            int Prop { get; }
VD>        }
VD>    }

VD>    class A : B<char>.ITest1<int>
VD>    {
VD>        void ConsoleApplication1.B<char>.ITest1<int>.Test<T>()
VD>        {
VD>            throw new NotImplementedException();
VD>        }

VD>        int B<char>.ITest1<int>.Prop
VD>        {
VD>            get { throw new global::System.NotImplementedException(); }
VD>        }
        
VD>        void B<Z>() { }
VD>    }

VD>    class Program
VD>    {
VD>        static void Main(string[] args)
VD>        {
VD>            B<char>.ITest1<int> a = new A();
VD>            a.Test<string>();
VD>        }
VD>    }
VD>}
VD>

Господа, что это вы так серьезно обсуждаете код.
Помоему это была шутка.
Или я не прав?
Меньше читай, больше думай. (А.Сурожский)
Re[2]: Дженерики как средство ителлектуальной обфускации код
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.04 16:34
Оценка:
Здравствуйте, vdimas, Вы писали:

V>
V>public interface ITest1<T>
VD>>        {
VD>>            void Test<K>();
VD>>            int Prop { get; }
VD>>        }
V>


V>че-то не понял прикола,

V>метод в интерфейсе не зависит от параметра дженерика интерфейса?
V>как же тогда насчет обязательности имплементации членов интерфейса?

Почему не зависит? Очень даже зависит. Просто у него кроме того могут быть и свои собственные параметры типа. В Test можно использовать как тип T, так и тип K.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Дженерики как средство ителлектуальной обфускации код
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.04 16:34
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

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


VD>>
VD>>        int B<char>.ITest1<int>.Prop
VD>>        {
VD>>            get { throw new global::System.NotImplementedException(); }
VD>>        }
VD>>

VP>А вот это что за констукция?

Алиас иерархии пространства имен (extern alias). global — это алиас используемый по умолчанию. Теперь можно при подключении сборки к проекту задать для них отдерьные алиасы, так что можно, например, подключать две версии одной и той же сборки.

Подробнее см. тут: Нововведения во второй публичной альфа версии VS 2005 (Whidbey) и .NET Framework
Автор(ы): Владислав Чистяков (VladD2)
Дата: 27.07.2004
Статья является продолжением цикла статей, опубликованных в номере 6 за 2003 год. В ней рассказывается о нововведениях, появившихся в новой версии VS 2005 (Whidbey) и .NET Framework. Упор делается в первую очередь на нововведения, связанные с программированием на C#.
(раздел "extern alias").
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Дженерики как средство ителлектуальной обфускации код
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.04 16:34
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>А что стало с алиасами для пространства имен C#1.0? Это пример объявления или использования?


Это алиас иерархии пространств имен, а не using c алиасом. Тут мика неверно выразился.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Дженерики как средство ителлектуальной обфускации код
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.04 16:34
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>Мне стало это интерсно, т.к. в Commands для KeyBinding похожий использовался синтаксиси "Global::Ctrl+Shift+D,F"


Это из другой оперы. Там Global означает, что шорткат будет виден во всех типах окон.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Дженерики как средство ителлектуальной обфускации код
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.04 16:34
Оценка:
Здравствуйте, Karabinos, Вы писали:K>Господа, что это вы так серьезно обсуждаете код.

K>Помоему это была шутка.

K>Или я не прав?

Ну, как в каждой шутке...
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.