Il existe plusieurs fonctionnalités de pattern dans le langage C#, c'est-à-dire que les classes ne doivent pas nécessairement dériver d'une interface spécifique, mais plutôt implémenter un certain pattern afin de participer à certaines fonctionnalités/syntaxe C#.
Prenons un exemple :
public class MyCollection : IEnumerable
{
public T Add(T name, T name2, ...) { }
public IEnumerator GetEnumerator() { return null; }
}
Ici, TYPE
est un type quelconque. En gros, nous avons une classe qui implémente IEnumerable
et possède une méthode nommée Add()
avec un nombre quelconque de paramètres.
Cela permet la déclaration suivante d'une nouvelle MyCollection
instance :
new MyCollection{{a1, a2, ...}, {b1, b2, ...} }
Ce qui est équivalent à :
var mc = new MyCollection();
mc.Add(a1, a1, ...);
mc.Add(b1, b2, ...);
Magique ! Entre-temps, Anders Hejlsberg a récemment laissé entendre (je crois lors de l'événement BUILD) que la nouvelle await/async
sera également mis en œuvre en utilisant des modèles, ce qui permet à WinRT de s'en sortir en retournant autre chose que Task<T>
.
Ma question est donc double,
- Quel est le modèle dont Anders parlait, ou ai-je mal compris quelque chose ? La réponse devrait être quelque part entre le type que WinRT fournit, quelque chose comme
IAsyncFoo
et la spécification non publiée. - Existe-t-il d'autres modèles de ce type (peut-être déjà existants) en C# ?