【问题标题】:How to develop a standard (C# vs. VB.NET)如何开发标准(C# 与 VB.NET)
【发布时间】:2009-10-05 21:12:25
【问题描述】:

所以,我不希望这引发 C# 和 VB.NET 开发人员之间的激烈战争。这纯粹是从开发部门的角度来看。多年来,我们一直是一家 VB.NET 公司,但这主要是因为我们雇用了谁。最近,该要求已被搁置,因为我们已经聘请了 2 个专门研究 C# 的人。在为这家公司转换为 VB.NET 之前,我曾经是一名 C++/C# 人员。

所以,对于无论是在招聘还是可维护性的基础上必须处理这个问题的每个人:你如何处理未来选择的标准化语言?我倾向于推动 C#,因为这将使 3 个可靠的 C# 开发人员在这里。但只是好奇大家对此有何看法。

【问题讨论】:

  • 你的店铺有多大?如果 6 人中有 3 人专门研究 c#,那么切换起来相对容易。如果它是 3 out 30,那么在 c# 中将更难进行。

标签: c# vb.net


【解决方案1】:

作为一个在杂货店工作的人,两者兼得并不难。但是,拥有一个可以更轻松地来回移动代码的标准会有所帮助。以下是您的标准的一些想法:

对于 VB 开发人员:

  • 在新代码中不允许使用旧的 vb6 样式函数。我说的是字符串和其他函数(Len、InStr、Replace、UBound 等)。转换运算符(CInt、Cstr 等)仍然可以,因为它们是语言运算符,但在可能的情况下更喜欢 Convert.To___() 函数,以便轻松与 C# 进行转换。
  • 需要Option StrictOption Explicit。将动态类型设置为强制要求而不是强烈建议,您将放弃一些动态类型的酷炫,但保持代码与 C# 相同是值得的。
  • 标准化字符串连接的“+”与“&”(如果您尚未使用 StringBuilder)
  • 首选AndAlsoOrElse 而不是AndOr

对于 C# 开发人员:

  • 不允许名称仅按大小写不同。这尤其包括与类型名称(SomeType sometype = ...)基本相同的名称。告诉他们改用 _ 前缀(而不是“m_”)。无论如何,您都应该这样做,但在混杂的商店中尤其重要,因为在 VB 中使用该代码将更加困难。

对于两者:

  • 禁止 ArrayList 和其他非泛型集合(因为它们不仅是邪恶的,而且 VB 和 C# 处理所有必需的转换非常不同,即使使用 CType 的严格选项也是如此)

如果您这样做,两组的代码之间将几乎没有真正的差异,并且您已经迈出了让 VB 开发人员像 C# 开发人员一样思考的第一步。

【讨论】:

  • 非常好的点。我在一家只有 VB 的商店工作,但我们仍然遵循您的所有标准,遵循这些原则会产生更健壮和类型安全的代码,符合框架标准。
  • 即使是“+”与“&”?我听说过的大多数仅使用 VB 的商店都会考虑倒退。
  • 乔尔,我能得到你关于 _ 与 m_ 的推理吗?我们已经对此进行了内部讨论,并确定这是一个品味问题。此外,还有一些模糊的提到 _ 以某种方式被保留,所以我们最终选择了 m_。
  • 这是大部分的味道:m_ 在 VB 代码中看起来很奇怪。此外,这种使用模式并不总是成员;有时是本地人。
  • @Joel Coehoorn:不,你说得对,我们使用 &。我以为你的意思是标准化其中之一。
【解决方案2】:

如果您有很多代码已经用某种特定语言编写,请选择该语言。

否则,如果您有更多的开发人员精通一种语言而不是另一种语言,则更喜欢该语言。

否则,更喜欢 C#(它通常更受欢迎,而且在功能方面,它们的差异不足以对单独的功能做出有意义的选择)。

【讨论】:

  • 看起来对我们来说最好的做法是切换到 C# 商店。我最初是一名 C++ 开发人员,所以再加上一群被聘用的开发人员是 C# 人员,而 C# 人员的市场使其成为一个简单的选择。现在,这实际上也成功了,因为我们正在修改一个代码库以适应 API 标准,因此将其切换到 C# 应该是一个好习惯。
【解决方案3】:

以前的客户使用 VB 编写任务关键型应用程序,他们开始发现 VB 程序员比 C# 更难找到。

所以他们决定开始将他们的应用程序切换到 C#。

与大多数 IT/开发问题一样,答案视情况而定。如果你的部门中有更多的人擅长 VB,那么就选择 VB。我不认为其中一个比另一个更好。

【讨论】:

  • 没错。所有这些都使用相同的库编译到 CLR。 .NET 中的语言本身只是语法糖。
【解决方案4】:

你问的问题其实很重要,太多人会告诉你语言选择只是个人喜好。但是您已经知道,从组织的角度来看,这是不正确的。选择一套标准的框架、语言、工具等是一项重要的业务决策。

您的程序员应该能够使用任何一种语言,只需一点时间、鼓励和一些培训。 C# 和 VB 很接近,没有重要的技术原因可以选择其中一个...

因此,我的建议是根据业务原因选择贵组织的语言。如果雇用 C# 人员更容易,或者如果你发现他们往往对你所做的工作有更好的技能组合,那么 C# 得一分。如果您为客户编写代码,而这些客户更喜欢 C# 可交付成果,那么再为 C# 评分。如果您在 VB 中已有代码,请为 VB 打 1 分。

这应该是一个非常简单的细分......只需忽略技术原因,专注于语言的选择将如何影响您的业务在招聘、培训、交付给客户的能力等方面。

【讨论】:

    【解决方案5】:

    如果您的公司采用 C# 有一个原因,那就是 lambda 运算符。如果没有 VB.NET 中 lambda 运算符的完全支持,一些最好的工具会变得残废或 DOA。例如:Fluent NHibernate、StructureMap 等。

    【讨论】:

      【解决方案6】:

      几年前,我们对 c# 进行了标准化,因为 c# 在严肃的开发人员中似乎有更多的追随者。

      让我明确一点,我并没有说 VB.NET 或使用它的人的坏话。

      【讨论】:

        【解决方案7】:

        这完全取决于您拥有的开发人员池。

        【讨论】:

          【解决方案8】:
          1. 如果您要雇用更多开发人员,请与一些当地招聘人员交谈,了解您所在地区的可用技能组合。可用的内容会影响您的选择。
          2. 确保您的开发人员可以使用您当前的代码库,无论是什么语言
          3. 询问您的开发人员的偏好,因为他们可能会根据技术决定留在公司。
          4. 查看您的特定行业对这些语言的支持。例如,一家律师事务所可能需要大量的 MS Office 和 VBA 集成。使用 VB.NET 可能具有交叉培训的好处。或者,您所在的行业可能使用大量基于 C++、C 或 Java 的工具。对于那些程序员来说,使用 C# 可能更自然。
          5. 查看您有哪些可用这些语言的培训资源。如果您可以针对一种特定语言获得更多或更便宜的培训,您可能会喜欢它。
          6. 开始考虑您将来过渡到另一种语言的计划。即使你今天标准化,5年后呢?还是10?语言变了,需求变了。

          【讨论】:

            【解决方案9】:

            在纯粹的能力基础上,它们大约是两种语言所能达到的接近程度。 VB.NET 倾向于获得更多的 COM 交互性并具有文字 XML——但 C# 很快就会获得一些。

            这实际上只是个人偏好以及您认为团队最有效率的语言。

            【讨论】:

              【解决方案10】:

              听起来您已经有了一个标准——VB.NET。也许你有兴趣或有兴趣改用 C#。

              让您的系统一半用 VB 编写,一半用 C# 编写几乎没有意义 - 尽管根据您组织的性质,这可能不适用。但一般来说,组织不应掉以轻心。

              如果我是你(并且你有兴趣自己迁移到 C#),那么我会推动 C#,但如果我是企业,那么我需要一个很好的理由来介绍这个新的复杂性、成本和管理问题.

              【讨论】:

                【解决方案11】:

                我们最近遇到了同样的问题。实际上,我们只是在两者中编写代码,具体取决于原始项目的启动方式。来回切换非常容易,尤其是使用 Visual Studio 时(当我开始输入“bool myvar ...”时,它总是“提醒”我,我如果我在 .vb 文件中,那我就做错了)。

                我们的优先级如下:

                • 如果我们已经有此项目/客户的代码,请使用现有语言
                • 使用客户喜欢的语言,如果他们关心的话
                • 使用 C#

                【讨论】:

                  【解决方案12】:

                  有充分的理由采用一种标准而不是另一种标准应该是指导因素。使用这些:

                  1. VB.NET 似乎比 C# 详细得多。 (例如:“Dim var as MyClass”与“MyClass var”)
                  2. C# 类似于 C++ 和 Java。 VB.NET 类似于......好吧,没什么。 (除非你算上 VB6...)
                  3. 尝试在 VB.NET 中创建ragged array。我敢你。

                  【讨论】:

                  • 1.冗长不会导致生产力问题,因为 IDE 为您完成了大部分工作。例如,如果您输入“If something”,然后按 Enter,则会自动添加 Then 和 End If。
                  • 2. VB.NET 确实有 lambda 表达式?? 3. VB.NET 与 VB6 类似。无论如何,VB 语法很容易掌握... 4. 锯齿状数组?你需要那个干什么??
                  • 糟糕。我没有意识到 VB.NET 现在可以做 Lambda 表达式。但是每次我想初始化一个变量时,我都不得不输入“Dim”和“As”,这让我很恼火。就 VB 语法而言,您如何测试引用不等式? “不是”还是“不是”?类型转换怎么样?你宁愿做“(int)x”还是“CType(x,int)”?而且我认为有人会认为 VB6 和 VB.NET 是相似的,这很有趣。除了仍然存在“Dim”和“As”之外,这些语言根本不同,以至于从一种语言到另一种语言的知识转移几乎为零。
                  • 如果您在记事本中编写应用程序,那么是的,VB.Net 的冗长很快就会令人讨厌。使用 Visual Studio、Intellisense 和 ReSharper(如果你有的话),就我而言,语言冗长不是问题。仅供参考,我是一名 c# 开发人员。
                  • 我的意思是 VB6 和 VB.NET 具有相似的语法,就像 C# 和 C++ 具有相似的语法但没有其他共同点 ;-) 至于锯齿状数组,我的意思是在许多情况下 (像我的)你根本不需要它们。在 VB 中初始化一个可能会更难,但是如果您基于此选择一种语言,那么您的决策因素就有问题:P
                  猜你喜欢
                  • 1970-01-01
                  • 2013-07-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-12-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-06-16
                  相关资源
                  最近更新 更多