На досуге разбирался с тоностями парсинга явной реализации методов дженерик интерфейсов и породил следующую конструкцию:
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: Дженерики как средство ителлектуальной обфускации кода :
public interface ITest1<T>
VD> {
VD> void Test<K>();
VD> int Prop { get; }
VD> }
че-то не понял прикола,
метод в интерфейсе не зависит от параметра дженерика интерфейса?
как же тогда насчет обязательности имплементации членов интерфейса?
Re: Дженерики как средство ителлектуальной обфускации кода :
Здравствуйте, 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]: Дженерики как средство ителлектуальной обфускации код
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, mikа, Вы писали:
M>>алиас для пространства имен
VP>А что стало с алиасами для пространства имен C#1.0?
Остались.
VP>Это пример объявления или использования?
Использование. global — это ключевое слово. Через него идет обращение к пространству имен, миную любые алиасы.
Re[5]: Дженерики как средство ителлектуальной обфускации код
Здравствуйте, mikа, Вы писали:
M>Использование. global — это ключевое слово. Через него идет обращение к пространству имен, миную любые алиасы.
Мне стало это интерсно, т.к. в Commands для KeyBinding похожий использовался синтаксиси "Global::Ctrl+Shift+D,F"
... << RSDN@Home 1.1.4 @@subversion >>
Re: Дженерики как средство ителлектуальной обфускации кода :
V>че-то не понял прикола, V>метод в интерфейсе не зависит от параметра дженерика интерфейса? V>как же тогда насчет обязательности имплементации членов интерфейса?
Почему не зависит? Очень даже зависит. Просто у него кроме того могут быть и свои собственные параметры типа. В Test можно использовать как тип T, так и тип K.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Дженерики как средство ителлектуальной обфускации код
Здравствуйте, V.Petrovski, Вы писали:
VP>Здравствуйте, VladD2, Вы писали:
VD>>
VD>> int B<char>.ITest1<int>.Prop
VD>> {
VD>> get { throw newglobal::System.NotImplementedException(); }
VD>> }
VD>>
VP>А вот это что за констукция?
Алиас иерархии пространства имен (extern alias). global — это алиас используемый по умолчанию. Теперь можно при подключении сборки к проекту задать для них отдерьные алиасы, так что можно, например, подключать две версии одной и той же сборки.
Здравствуйте, V.Petrovski, Вы писали:
VP>Мне стало это интерсно, т.к. в Commands для KeyBinding похожий использовался синтаксиси "Global::Ctrl+Shift+D,F"
Это из другой оперы. Там Global означает, что шорткат будет виден во всех типах окон.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Дженерики как средство ителлектуальной обфускации код