VB.NET中的产量

VB.NET中的产量,第1张

概述C#有关键字叫 yield. VB.NET缺少这个关键字。 Visual Basic程序员如何得到这个关键字的缺乏?他们实现自己的迭代器类吗?或者他们尝试和代码,以避免迭代器的需要? yield关键字强制编译器在后台做一些编码。 The implementation of iterators in C# and its consequences (part 1)有一个很好的例子。 注意:这个答案现 C#有关键字叫 yield. VB.NET缺少这个关键字。 Visual Basic程序员如何得到这个关键字的缺乏?他们实现自己的迭代器类吗?或者他们尝试和代码,以避免迭代器的需要?

yield关键字强制编译器在后台做一些编码。 The implementation of iterators in C# and its consequences (part 1)有一个很好的例子。

注意:这个答案现在是老的。迭代器块已被添加到 VB.NET

C#在编译时将yIEld关键字转换为状态机。 VB.NET没有yIEld关键字,但它有自己的机制,用于在C#中不容易获得的函数中安全地嵌入状态。

C#static关键字通常使用Shared关键字翻译为Visual Basic,但有两个地方的事情让人困惑。一个是C#静态类是Visual Basic中的一个模块,而不是一个Shared类(你会认为他们会让你在Visual Basic中编码,但noooo)。另一个是VB.NET有自己的Static关键字。然而,Static在VB.NET中有不同的含义。

你使用VB.NET中的Static关键字来声明一个函数内的变量,当你做的变量保持其状态跨函数调用。这不同于在C#中声明私有静态类成员,因为VB.NET中的静态函数成员也保证是线程安全的,因为编译器将它编译成在编译时使用Monitor类。

那么为什么要在这里写这一切?嗯,应该可以建立一个可重用的通用迭代器< T>类(或VB.NET中的Iterator(Of T))。在这个类中,你将实现C#使用的状态机,使用对应于C#关键字的YIEld()和Break()方法。然后你可以在一个函数中使用一个静态实例(在VB.NET意义上),这样它最终可以做同样的工作作为C#的产量大约相同的代码(丢弃类实现本身,因为它将无限可重复使用)。

我没有足够关心YIEld自己尝试,但它应该是可行的。也就是说,它也远不是微不足道,正如C#团队成员Eric lippert称之为“the most complicated transformation in the compiler”。我也相信,因为我写了一年前的第一稿,直到Visual Studio 2010出来,它是不可能有一个有意义的方式,因为它需要发送多个lambdas到Iterator类,所以真的实际我们需要[.NET 43的支持多行lambdas。

总结

以上是内存溢出为你收集整理的VB.NET中的产量全部内容,希望文章能够帮你解决VB.NET中的产量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存