对于某些项目而言,C#.NET中哪些项目比VB.NET更适合?
性能?,功能?,库/组件?,声誉?,可靠性?可维护性?,轻松?
基本上任何 C#都可以做到,这是不可能的,使用VB,,反之亦然。 在为项目选择C#/ VB时,您必须考虑的事项。
答案 0 :(得分:33)
C#和VB基本相同,但存在一些细微差别。除了明显的语法差异外,您还有以下不同之处:
C#的语法遵循与c和java类似的语法,这使得从这些语言转换起来更加舒适,因为VB对VB用户来说更舒服。到目前为止,性能,库或组件几乎完全相同。
至于选择哪一个,除非你需要做不安全的操作,然后选择最自然的语言。经过多年的VB开发人员,我喜欢不必写作如果yadada然后.....结束如果(yadaya){....}保存我的腕管一些额外的击键(然后可以用来回答SO题)
刚刚学到了另外一个区别btw C#和VB是VB支持过滤异常所以你可能会像这样伪:
try
{
//do something that fails
}
catch(Exception ex when ArgumentException,
ArgumentNullException, FormatException)
{
//Only handle these three types
}
这不应该与能力相混淆:
try
{
//something that fails
}
catch(ArgumentException)
{
//Log Error
}
catch(ArgumentNullException)
{
//Log Error
}
在这种情况下,您将在VB世界中以不同方式处理异常,您可以定义一段代码来处理多种类型的异常。
更多的差异。
C#
if (foo is FooObject){}
VB
If TypeOf foo is FooObject then
答案 1 :(得分:21)
我认为Kathleen Dollard的这篇博文提供了一个很好的概述:
What a C# Coder Should Know Before They Write VB
她的第一个建议是:
1)克服尊重或退出 在你开始之前。 VB很棒 语言。
答案 2 :(得分:15)
极客之间的街头信誉。
(并且不要假装这不重要!)
答案 3 :(得分:11)
其他人已经涵盖了很多差异 - 正如已经多次说过的那样,他们几乎是等同语言。到目前为止我还没有看到一些差异:
VB9有:
C#3有:
我怀疑还有更多,但我想我会把它们扔进混合物中。
答案 4 :(得分:9)
当您遇到问题时,您通常可以通过Google获取代码示例,该示例显示如何在几分钟内解决问题。这是提高生产率的重要因素。当我使用Delphi时,我不得不将代码样本从C转换为Object Pascal - 可行,但是很乏味,即很多摩擦。所以不要低估这个事实......
绝大多数.Net代码示例都在C#中!
答案 5 :(得分:5)
在早期版本的VB.NET中,差异更明显,但是对于当前版本,没有显着差异。
VB直接在代码中支持XML文字,C#不支持。 C#支持不安全的代码而VB则不支持。从技术上讲,这两者是最大的差异。有许多小的变化,但它们并不重要。我更喜欢C#,因为我认为语法不那么臃肿。很容易识别代码块而不是看到一堆关键字,但这是一种纯粹的个人偏好。
选择您和您的团队更熟悉的那个。
答案 6 :(得分:4)
VB.Net有一个根命名空间,C#有一个默认的命名空间,它不相同。因为当你在VB.Net中有一个根命名空间时,它总会在命名空间之前添加它。
例如:如果您在VB.Net中有一个名为namespace1的rootnamepsace,然后将其添加到您的文件中。
Namespace namespace1
Public Class class1
End Class
End Namespace
然后你必须将它称为namespace1.namespace1.class1
如果你有一个名为namespace1的默认命名空间,那么在C#中就可以在你的文件中使用它了。
namespace namespace1{
public class class1{}
}
然后你仍然可以将它称为namespace1.class1
答案 7 :(得分:3)
VB对错误有更好的反馈。在C#中,您必须更频繁地编译以获取语法中的所有错误。
答案 8 :(得分:3)
我在C#中看到的最大优势是绝大多数开源项目,示例代码和博客片段都是用C#编写的。虽然使用工具(或者你的头)很容易将它们转换为VB.NET,但对于VB开发者来说(对我来说)仍然是单调的任务。
即使您每天都在VB.NET中编写,您仍然需要能够阅读C#
从技术上讲,它们共享具有相同性能和内存特性以及相同类型系统的相同框架,因此我发现很难将这两者分开。
大多数优秀的开发者应该能够在两天之间调整,调整时间为几天。
我的核心挫折在于我写下的数百个时间:
String lastName as String
并想知道为什么它永远不会编译!
答案 9 :(得分:3)
我最喜欢的C#,VB没有的是yield语句。它允许您从方法中轻松返回延迟评估的IEnumerable。
以下是一篇涵盖它的文章:http://msdn.microsoft.com/en-us/magazine/cc163970.aspx
答案 10 :(得分:2)
在C#中,您可以对事件/代理进行更精细的控制。但你很少需要这个。
C#还有很多代码示例。
在VB.Net中,(很多)使用后期绑定更容易。例如,COM对象(在4.0版本的C#中)。
一旦我更了解F#,我可能会将它用于F#更适合的部件。
答案 11 :(得分:2)
性能?
没有区别,虽然VB历史上在循环中使用了一个奇怪的索引,这意味着你必须在大多数时间从最高索引中减去1:
For i = 0 To someArrayOrString.Length - 1 …
虽然我怀疑这会以任何可衡量的方式影响效果。
另一方面,由于后台编译,VB实际上编译似乎更快。有些人声称这会让IDE反应缓慢,但我从未注意到自己。
功能
在少数情况下,C#的yield
语句非常有用。 VB需要更多的手动工作。此外,lambda在C#中实现得更好,特别是在语法上。请考虑以下两个陈述:
Parallel.For(1, 10000, i => {
// Do something
});
与
Parallel.For(1, 10000, Sub() _
' Do something '
End Sub)
除了VB还不能做到这一点,而且禁止在这个地方发表评论,它更加混乱,而且通常都是禁止的。
库/元件
相同。
声望?
不重要。 “街头威望”?抱歉。不是一个因素。克服它,尼克。
可靠性? 可维护性? 缓解?
或多或少相同。我声称VB更容易,但可能有偏见,无论如何,它只是边缘化。
答案 12 :(得分:1)
我认为Josh对语言差异进行了很好的汇总。
工具支持
但Visual Studio处理这些语言的方式也存在差异。 代码片段更容易在C#编辑器中使用,重构也更好。
VB编辑器通过不显示所有选项来简化智能感知。
我确信还有更多的东西,但那些我作为C#呃(做很少的VB)注意到的东西。
答案 13 :(得分:1)
由于C#和VB.Net都编译成MSIL,因此两者的性能,功能,库和组件几乎相同。反射可以将MSIL代码解压缩为C#或VB.NET(或许多其他语言)
这基本上离开了我们,C#看起来很像Java和C ++,这使它更具可信度。
答案 14 :(得分:1)
据我了解,语言之间存在差异,尽管它们很少。我建议您使用您/您的开发人员最满意的语言。如果他们已经有VB经验,那么我建议VB.Net/vice-versa。
虽然我更喜欢C#的简洁语法。 :)
答案 15 :(得分:1)
以下是此追踪尚未涵盖的另一点:
更高的就业能力+更好(更多)开发资源
现在我不同意这种观点:
VB商店有更多的C#开发商店
如果你对VB更强,那么一些落后的c#雇主会让你处于严重的劣势。所以也许C#是更好的选择。
另一方面,当您为C#项目雇佣人员时,您将能够吸引更多候选人参与iterview并获得更好的技能 - 我不认为细节应该被忽视。
答案 16 :(得分:1)
我不得不说,在使用Google搜索示例或文档时,我的经验是C#示例质量比VB示例更好。这并不是说没有糟糕的C#示例,但如果你搜索类似“字典下拉”的内容,添加C#将在列表中提供更高质量的答案。
这不适用于同时显示C#和VB代码的示例。
答案 17 :(得分:0)
目前VB.Net的lambda表达式实现很差。这意味着你无法在C#中做到整洁的事情。嗯,你可以,但在大多数情况下需要一个非常难看的解决方法。
这在VB.Net 10.0中得到了解决。
答案 18 :(得分:0)
免于旧版本,C#中的数组声明不会使用额外元素填充。 VB.NET数组填充了额外的元素,因此传统的VB6代码迁移更容易。
C#比VB.NET更加一致
Button1.Color() = Color.Red
Button1.Color = Color.Red
当一个学生问我何时在VB.NET的属性上使用括号时,我无法给出答案。很难为这种错误提供有见地的推理。
与实例和静态成员的一致性。 VB.NET允许访问实例上的静态成员,例如yarn.Sleep(1000),这是一种错误。 https://stackoverflow.com/questions/312419/language-features-you-should-never-use