Существует несколько паттернов-особенностей языка C #, т.е. классы не должны быть производными от определенного интерфейса;но лучше реализовать определенный шаблон, чтобы использовать некоторые синтаксис / функции C #.
Давайте рассмотрим пример:
public class MyCollection : IEnumerable
{
public T Add(T name, T name2, ...) { }
public IEnumerator GetEnumerator() { return null; }
}
Здесь TYPE
- любой тип.По сути, у нас есть класс, который реализует IEnumerable
и имеет метод с именем Add()
с любым количеством параметров.
Это позволяет следующее объявление нового экземпляра MyCollection
:
new MyCollection{{a1, a2, ...}, {b1, b2, ...} }
Что эквивалентно:
var mc = new MyCollection();
mc.Add(a1, a1, ...);
mc.Add(b1, b2, ...);
Магия! Тем временем, недавно (я верю во время события BUILD), Андерс Хейлсберг допустил, что новый await/async
будет реализован с использованием шаблонова также, что позволяет WinRT уйти с возвратом чего-то отличного от Task<T>
.
Так что мой вопрос двоякий:
- Каков паттерн, о котором говорил Андерс, или ячто-то не так понял?Ответ должен быть где-то между типом WinRT, что-то вроде
IAsyncFoo
и неопубликованной спецификацией. - Существуют ли какие-либо другие подобные шаблоны (возможно, уже существующие) в C #?