3 votes

Quels sont les modèles d'activation de la syntaxe en C# ?

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,

  1. 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.
  2. Existe-t-il d'autres modèles de ce type (peut-être déjà existants) en C# ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X