c# - C# 中的语法启用模式是什么?

标签 c# c#-5.0

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> 以外的内容.

所以我的问题是双重的,

  1. Anders 所说的模式是什么,还是我误解了什么?答案应该介于 WinRT 提供的类型之间,类似于 IAsyncFoo。以及未发布的规范。
  2. C# 中是否还有其他此类模式(可能已经存在)?

最佳答案

规范草案发布 - 您可以从 Visual Studio home page 下载它. async 的模式是 driis 的回答中给出的模式——你也可以阅读我的 Eduasync blog series有关更多详细信息,请使用 this post致力于模式。

请注意,此模式 适用于“您可以等待的”。异步方法必须返回void , TaskTask<T> .

除了您最初提到的集合初始值设定项之外,就 C# 中的其他模式而言:

  • foreach可以迭代非 IEnumerable 实现,只要该类型具有 GetEnumerator返回具有 MoveNext() 类型的方法和 Current成员
  • LINQ query expressions解决调用 Select , Where , GroupBy

关于c# - C# 中的语法启用模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7568558/

相关文章:

c# - C# 中是否有类似 ConcurrentQueue 的数据结构,它允许我等待一个空队列,直到添加一个项目?

c# - 如何将 DataTable 转换为通用列表?

c# - 动态的意外编译时错误

xamarin - 处理异步方法的配置更改

.net - 使用异步 CTP 封装同步方法不起作用

c# - Windows 10 通用音频后台播放器 - 无法注册后台任务 : Run Method Doesn't fire

c# - 调整位图大小以绘制字符串

c# - BackgroundWorker() 运行时 UI 挂起

c# - 在断点之间切换

c# - 如何运行多个线程并等待完成所有线程