C# 语言有几个模式特征,即类不需要从特定接口(interface)派生;而是实现某种模式以参与某些 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 事件期间)Anders Hejlsberg 透露了新的 await/async
也将使用模式来实现,这让 WinRT 无需返回 Task<T>
以外的内容.
所以我的问题是双重的,
- Anders 所说的模式是什么,还是我误解了什么?答案应该介于 WinRT 提供的类型之间,类似于
IAsyncFoo
。以及未发布的规范。 - C# 中是否还有其他此类模式(可能已经存在)?
最佳答案
规范草案已发布 - 您可以从 Visual Studio home page 下载它. async 的模式是 driis 的回答中给出的模式——你也可以阅读我的 Eduasync blog series有关更多详细信息,请使用 this post致力于模式。
请注意,此模式仅 适用于“您可以等待的”。异步方法必须返回void
, Task
或 Task<T>
.
除了您最初提到的集合初始值设定项之外,就 C# 中的其他模式而言:
-
foreach
可以迭代非 IEnumerable 实现,只要该类型具有GetEnumerator
返回具有MoveNext()
类型的方法和Current
成员 - LINQ query expressions解决调用
Select
,Where
,GroupBy
等
关于c# - C# 中的语法启用模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568558/