Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3.0 使用C#3.0功能有什么缺点吗?_C# 3.0_Language Features - Fatal编程技术网

C# 3.0 使用C#3.0功能有什么缺点吗?

C# 3.0 使用C#3.0功能有什么缺点吗?,c#-3.0,language-features,C# 3.0,Language Features,我喜欢C#3.0特性,尤其是lambda表达式、自动实现的属性,或者在适当的情况下还隐式输入局部变量(var关键字),但当我的老板透露我正在使用它们时,他要求我不要在工作中使用任何C#3.0特性。有人告诉我,这些特性对大多数开发人员来说都不是标准的、令人困惑的,其有用性值得怀疑。我被限制只使用C#2.0特性,他也在考虑禁止匿名方法 由于我们的目标是.NETFramework3.5,因此我看不出有任何理由进行这些限制。在我看来,可能唯一的缺点是我的几个同事和老板(也是程序员)必须学习一些C#3.0

我喜欢C#3.0特性,尤其是lambda表达式、自动实现的属性,或者在适当的情况下还隐式输入局部变量(
var
关键字),但当我的老板透露我正在使用它们时,他要求我不要在工作中使用任何C#3.0特性。有人告诉我,这些特性对大多数开发人员来说都不是标准的、令人困惑的,其有用性值得怀疑。我被限制只使用C#2.0特性,他也在考虑禁止匿名方法


由于我们的目标是.NETFramework3.5,因此我看不出有任何理由进行这些限制。在我看来,可能唯一的缺点是我的几个同事和老板(也是程序员)必须学习一些C#3.0的基础知识,这应该不难。你觉得怎么样?我的老板说得对吗?我是不是遗漏了什么?在一家以C#为主要编程语言的开发公司里,有没有什么好的理由来限制这种限制?

我也有类似的经历(要求不要使用泛型,因为泛型可能会让我的同事感到困惑)

事实是,我们现在使用泛型,而我的同事中没有一个对它们有问题。他们可能没有掌握如何创建泛型类,但他们确实理解如何使用它们

我的观点是,任何开发人员都可以学习如何使用这些语言特性。一开始它们可能看起来很先进,但随着人们习惯了它们,新鲜感带来的冲击就会减轻

使用这些特性(或任何新的语言特性)的主要论点是,这是一种简单易行的方法,可以帮助我的同事提高技能,而不是停滞不前

至于您的特殊问题-不使用lambdas。很多对BCL的更新都有以委托为参数的重载——在许多情况下,这些重载最容易表示为lambda,不这样使用它们会忽略BCL的一些新的和更新的用法


关于你的同龄人无法学习lambdas的问题,我发现Jon Skeets C#深入探讨了他们是如何以一种易于理解和真正令人大开眼界的方式从代表演变而来的。我建议您为您的上司和同事准备一份副本。

不管您喜欢与否,如果您计划在任何情况下使用LINQ,您都必须使用一些C#3.0语言规范

如果你的老板想利用你从3.5中获得的功能集,他就必须对这些功能进行热身,这些功能集数量众多,值得你花时间去投资


此外,根据我在领导团队中的经验,我发现使用3.0规范实际上有助于开发人员对代码库的可读性和理解。开发人员花了大约一周的时间试图理解语法的含义,但是一旦他们理解了语法,他们就更喜欢新的方法而不是旧的方法。

如果从现在开始这个项目严格来说是C#3+,那么你就不会因为包含这些项而破坏构建。但是,在使用它们之前,您应该注意以下几点:

  • 如果项目负责人做出决定并投反对票,你就不能使用它们
  • 除此之外,您应该在代码更易于维护的地方使用它们
  • 您不应该以令人困惑或不必要的方式使用它们,因为它们不会显著提高代码的可维护性。这意味着您不应该在代码实际上相同或几乎没有改进的地方使用它们

如果微软没有定义标准,而这些是他们添加到非微软语言中的功能,我会说你的老板可能有道理。但是,由于Microsoft定义了该语言,并在实现.NET3.5(和4.0)的重要部分时使用了这些功能,因此我认为忽略它们是愚蠢的。您可能不会选择使用其中的一些功能--
var
,例如,由于编码标准的原因,可能在所有环境中都不可接受--但避免使用新功能的总体策略似乎不合理


更棘手的问题是,你应该在什么时候开始使用新功能,因为它们可能会让人困惑,可能会延迟开发。一般来说,我选择在新项目中使用新的语言特性和平台元素。当特性/框架增强出现时,我通常避免在当前正在开发的项目上使用它们,而将其推迟到下一个项目。在一个较长的项目中,如果重新构建的量很小或者功能值得更改,我可能会在一个重要的里程碑上介绍它们。通常情况下,我会等到项目有重大变化时再评估是否有必要对新功能进行重构。

对于某些功能的长期后果,还没有定论,但是,如果他们的主要理由是“这让其他开发人员感到困惑”或类似的话,我会担心人才的质量。

你的老板需要理解,语言(和其他)改进旨在为开发人员提供更多的能力,并使他们更高效地完成手头的任务,如果他出于未知原因不允许他们那么:

  • 开发团队没有发挥最大的潜力
  • 公司没有从提高的效率/生产力中获益

正如其他人所说,如果开发人员不能跟上他们日常使用的语言的一些最新改进,他们就不值得付出代价。我怀疑你的老板最近没有做太多的编码工作,正是因为他无法理解最新的语言改进,才做出了这一决定。

有些人只是害怕改变,因为也许你会用新奇的技术让他们看起来都很愚蠢。也可能是你的老板不想让团队学习新东西,而不是以旧的方式完成工作