gpt4 book ai didi

c# - 您如何处理 C# 的新功能,以免它们导致代码编写不当?

转载 作者:太空狗 更新时间:2023-10-29 23:04:46 25 4
gpt4 key购买 nike

C# 3.0 中引入了许多让我感到不安的特性,例如对象初始值设定项、扩展方法和隐式类型变量。现在,在 C# 4.0 中,对于动态关键字之类的东西,我变得更加担心。

我知道这些特性中的每一个都可以以适当的方式使用但是在我看来,它们使开发人员更容易做出错误的编码决策,从而编写更糟糕的代码.在我看来,微软正试图通过使编码变得简单和要求不高来赢得市​​场份额。就我个人而言,我更喜欢一种严谨的语言,它对我的​​编码标准提出了更多要求,并迫使我以 OOP 方式构建事物。

以下是我对上述功能的担忧的几个示例:

对象构造函数可以执行不向消费者公开的重要逻辑。这是在对象开发者的控制之下。对象初始化程序取消了这种控制,并允许消费者决定要初始化哪些字段。

编辑:我没有意识到您可以混合构造函数和初始化程序(我的坏处),但在我看来这开始变得困惑,所以我仍然不相信这是向前迈出的一步。

允许开发人员使用扩展方法扩展内置类型允许所有人开始将他们最喜欢的宠物方法添加到字符串类,这可能会以令人眼花缭乱的选项数组结束,或者需要更多的编码标准监管来清除这些出来。

允许隐式类型变量允许快速和肮脏的编程而不是或正确的 OOP 方法,这会很快成为整个应用程序中无法管理的困惑变量。

我的担心有道理吗?

最佳答案

对象初始值设定项仅允许客户端在构造后立即设置属性,不会放弃任何控制,因为调用者仍必须确保满足所有构造函数参数。

我个人觉得他们添加的很少:

Person p1 = new Person("Fred");
p1.Age = 30;
p1.Height = 123;

Person p2 = new Person("Fred")
{
Age = 30;
Height = 123;
};

我知道很多人不喜欢“var”关键字。我能理解为什么这是一种公开邀请的滥用行为,但我不介意它提供的类型非常明显:

var p1 = new Person("Fred");
Person p2 = GetPerson();

在上面的第二行中,尽管有方法名称,但类型并不明显。在这种情况下,我会使用该类型。

扩展方法——我会非常谨慎地使用它们,但它们对于使用便捷方法扩展 .NET 类型非常有用,尤其是 IEnumerable、ICollection 和 String。 String.IsNullOrEmpty() 作为扩展方法非常好,因为它可以在空引用上调用。

我认为您不必担心,优秀的开发人员总是会尊重地使用他们的工具,而糟糕的开发人员总是会想方设法滥用他们的工具:限制工具集并不能解决这个问题。

关于c# - 您如何处理 C# 的新功能,以免它们导致代码编写不当?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com