powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалентны ли данные объявления?
25 сообщений из 25, страница 1 из 1
Эквивалентны ли данные объявления?
    #38854802
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток
Развейте пожалуйста мои сомнения:эквивалентны ли два данных объявления интерфейса или нет?

Код: c#
1.
2.
 public IEnumerable<T> Ancestors<T>() where T : OpenXmlElement;
        public IEnumerable<OpenXmlElement> Ancestors();



Заранее спасибо.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38854834
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейВсем доброго времени суток
Развейте пожалуйста мои сомнения:эквивалентны ли два данных объявления интерфейса или нет?

Код: c#
1.
2.
 public IEnumerable<T> Ancestors<T>() where T : OpenXmlElement;
        public IEnumerable<OpenXmlElement> Ancestors();




Заранее спасибо.
Нет.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38854947
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок, а можете тогда пояснить чем неэквивалентны?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855031
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей,

а вам в каком контексте то нужно? Или сугубо теоретический вопрос?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855059
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное скорее теоретический. Я не очень силен в теме шаблонов. Насколько я понимаю и в первой и во второй строке объявляется интерфейс для всех объектов, у которых тип OpenXmlElement. Только в первой строке это объявление через условие, а во втором непосредственно указан тип. Я правильно понимаю? Поправьте меня если не сложно. И сразу второй вопрос а в каких контекстах можно это рассматривать?

Заранее спасибо
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855127
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вариант с T более универсальный, более широко трактуется, соответственно менее удобен и больше шансов на ошибку

сравните:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
    interface IInterface
    {
        IList<T> GetList<T>() where T : MyClass;
        IList<MyClass> GetList2();
    }

    public class MyClass
    {
        public string Name { get; set; }
    }
    public class MyClass2: MyClass
    {
        public string  Text { get; set; }
    }

    public class Worker: IInterface
    {
        public IList<T> GetList<T>() where T : MyClass
        {
            return new List<T>(new[] {  (T)Activator.CreateInstance(typeof(MyClass)), (T) Activator.CreateInstance(typeof(MyClass2)) });
        }

        public IList<MyClass> GetList2()
        {
            return new List<MyClass>(new[] { new MyClass(), new MyClass2()  });
        }
    }
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855187
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Код: c#
1.
2.
3.
4.
 public IList<T> GetList<T>() where T : MyClass
        {
           .....
        }


Такая конструкция вообще плохая.
T должен быть объявлен на уровне типа или же должен выводиться компилятором из параметров.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855188
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, но по сути получается делают они одно и тоже.... Я понял что мне нужно еще много читать.... Не направите меня на литературу где эти моменты доходчиво разъясняют?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855196
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Про объявление на уровне типов понял, а по поводу выводится компилятором из параметров это как?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855198
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВArm79,
Код: c#
1.
2.
3.
4.
 public IList<T> GetList<T>() where T : MyClass
        {
           .....
        }



Такая конструкция вообще плохая.
T должен быть объявлен на уровне типа или же должен выводиться компилятором из параметров.
Да я не спорю. Не тот случай, когда нужно самому с T работать
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855204
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Я теряю нить Ваших рассуждений, можно подоходчивей.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855215
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейArm79,

Я теряю нить Ваших рассуждений, можно подоходчивей.
Можно. Так делать не нужно: public IList<T> GetList<T>() where T : MyClass
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855225
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АлексейЕвгенийВ,

Про объявление на уровне типов понял, а по поводу выводится компилятором из параметров это как?
Это когда компилятор по параметрам может вывести T.
Например.
Код: c#
1.
2.
3.
4.
5.
6.
7.
 static T MyMethod<T>(Func<T> fun)
        {
            return fun();
        }

var x1 = MyMethod(() => 3);
var x2 = MyMethod(() => new Func<double, double>(Math.Sin));
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855240
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,

Понял, не буду :)
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855261
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Примерно понял

Ничего не порекомендуете почитать по данному вопросу?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855410
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей
Ничего не порекомендуете почитать по данному вопросу?
Может блог Эрика.
Там не всегда про это, но всегда интересно.
http://ericlippert.com/
http://blogs.msdn.com/b/ruericlippert/
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855427
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Спасибо, пойду вникать
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855500
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей,
Если есть желание повредить неокрепший моСк, то вот статейка :)
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855526
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Для меня это пока тяжеловато...
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855527
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВАлексей,
Если есть желание повредить неокрепший моСк, то вот статейка :)
Хм... Тут и для окрепшего моСка есть риск...
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38855724
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79Хм... Тут и для окрепшего моСка есть риск...
Да нет там ничего сложного - достаточно представлять себе, что такое комбинатор неподвижной точки Вот тут то же самое изложено немного попроще: http://gandjustas.blogspot.ru/2011/11/blog-post.html
Хотя, конечно, да, забывать не стоит:
Введение в функциональное программированиеВпервые понятие комбинатора и основанная на нём теория были сформалированны М.И.Шейнфинкелем в работе Schonfinkel (1924) ещё до появления лямбда-исчисления. Вскоре после этого аналогичные результаты были получены Карри, независимо от Шейнфинкеля и Чёрча. Когда Карри ознакомился с работами Шейнфинкеля, он предпринял попытку с ним связаться, но к этому времени Шейнфинкель оказался в психиатрической лечебнице.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38856538
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

спасибо за ссылочку, при прочтении возник вопрос в данном лямбда выражении:

fact = f => x => x > 1 ? x * f(x - 1) : 1;

Что значит f(x-1)?
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38856615
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей,

Это означает рекурсивный вызов делегата.
Вот здесь: http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx описано по шагам, как от обычной лямбды дойти до Y-комбинатора. В результате получается практически то же самое, что в постинге выше.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38856617
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныкак от обычной лямбды дойти до Y-комбинатора
И перед этим нужно хорошо понимать, что такое каррирование (currying) - оно там применяется дважды. Но это не такая уж и сложная штука.
...
Рейтинг: 0 / 0
Эквивалентны ли данные объявления?
    #38856686
Фотография Алексей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

Спасибо пойду вникать
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Эквивалентны ли данные объявления?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]