C# 3.0 中引入了许多让我感到不安的功能,例如对象初始值设定项、扩展方法和隐式类型变量。现在,在 C# 4.0 中,像动态关键字这样的东西我变得更加担心。
我知道这些功能中的每一个CAN以适当的方式使用BUT在我看来,它们使开发人员更容易做出错误的编码决策,从而编写出更糟糕的代码。在我看来,微软正试图通过使编码变得简单且要求不高来赢得市场份额。就我个人而言,我更喜欢一种严谨的语言,它对我的编码标准提出了更多要求,并迫使我以 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() 作为扩展方法非常好,因为它可以在空引用上调用。
我认为您不必担心,优秀的开发人员总是会尊重地使用他们的工具,而糟糕的开发人员总是会想方设法滥用他们的工具:限制工具集并不能解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)