Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C#, ограничения генериков.

5
27 октября 2008 года
hardcase
4.5K / / 09.08.2005
Недавно на Гугловых Ответах задал вопрос:
[quote=hardcase]
Почему нельзя указывать прототип конструктора, отличный от new(), в ограничениях генериков в C#?


Генерики в C# (ревизия языка начиная с 2.0) позволяют указывать ограничения (where-предложение), среди которых есть ограничение на прототип конструктора. Странно, но можно указать только прототип конструктора по умолчанию: new().
Пример возможного использования (генерик-метод) произвольного прототипа:
 
Код:
public class Bar {
    public T Foo<T>(int x, string y) where T: new(int, string) {
        return new T(x, y);
    }
}
Подобное ограничение в настоящий момент приходится обходить используя Activator.CreateInstance, что конечно, не так изящно, как хотелось бы:
 
Код:
public class Bar {
    public T Foo<T>(int x, string y) {
        return (T)Activator.CreateInstance(typeof(T), x, y);
    }
}
[/quote]
Покачто никто не ответил, может кто из наших может ответить?
63
27 октября 2008 года
Zorkus
2.6K / / 04.11.2006
Немного странно вопрос поставил ты.
Наверное, потому что изначально архитекторы генериков решили, что реализация этой фичи - менее приоритетная задача по сравнению с остальными, которые им требовалось реализовать.
А раз она не была реализована в версии языка 3.0 - видимо, жалоб на отсутствие этой фичи было немного, или же их авторы (жалоб) не смогли донести их во "убедительном" виде до тех, кто разрабатывает генерики.
Вот так я думаю.
5
27 октября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Zorkus
Немного странно вопрос поставил ты.
Наверное, потому что изначально архитекторы генериков решили, что реализация этой фичи - менее приоритетная задача по сравнению с остальными, которые им требовалось реализовать.


Уверяю, она реализуется относительно элементарно (относительно лямбда-выражений) - я знаю толк в компиляторах.

Цитата: Zorkus
А раз она не была реализована в версии языка 3.0 - видимо, жалоб на отсутствие этой фичи было немного, или же их авторы (жалоб) не смогли донести их во "убедительном" виде до тех, кто разрабатывает генерики.
Вот так я думаю.

Не слишком убедительно. И, все же, я считаю эту фигню одним из промахов разработчиков. Очевидно однобокое решение.

63
27 октября 2008 года
Zorkus
2.6K / / 04.11.2006
Цитата: hardcase
Уверяю, она реализуется относительно элементарно (относительно лямбда-выражений) - я знаю толк в компиляторах.


Я не сказал, что ее сложно сделать. Я сказал - что это не было приоритетной задачей.

Цитата: hardcase

Не слишком убедительно. И, все же, я считаю эту фигню одним из промахов разработчиков. Очевидно однобокое решение.


Ну да, не спорю. В любой платформе, если покопаться, можно найти решения, которые очень многим покажутся однобокими.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог