C# 7有一个很好的新语言特性: Deconstructor。例如,可以将其用于值元组。但是,我也可以为自己的类创建自己的解构函数。我为什么要这么做?我的类有属性。所以无论如何都可以访问个别的项目。
发布于 2017-05-14 01:28:53
解构主义提供了相当简洁和清晰的传统选择,并提供了一个完全功能风格的编程支持。
考虑一下Microsoft的这个简单的单行解构函数示例:
var (first, middle, last) = LookupName(id1); 要以传统的面向对象的方式做同样的事情,您必须编写如下代码:
class Name
{
public string First { get; set; }
public string Middle { get; set; }
public string Last { get; set; }
}var name = someObject.LookupName(id1);
var first = name.First;
var middle = name.Middle;
var last = name.Last;即使您返回了一个元组,它仍然需要4行代码,并且您将失去属性名称映射:
var name = someObject.LookupName(id1);
var first = name.Item1;
var middle = name.Item2;
var last = name.Item3;发布于 2017-05-15 20:31:58
对于这个问题,“用例”是一个有点奇怪的说法。这不允许你做任何你以前做不到的事。在某些情况下更整洁。
我能想到的唯一主要的事情是,它提供了一些有限的编译时检查。例如,假设您有一个UsAddress类。您有第1行、第2行、城市、州和zip。您可以将其分解为变量var (line1, line2, city, state, zip) = ObtainAddress()。现在假设您想要添加第3行,这个点现在将是一个编译错误,因为它与解构函数不匹配,您可以在每个调用站点评估您需要对第3行做什么。另一种选择是:
var address = ObtainAddress();
var line1 = address.Line1;
// ...在这种情况下,新字段不会出现编译错误。当然,这是否好,这是它自己的争论。
C# 6和7中的许多想法都在润色和缓解痛点,似乎很多人抱怨缺少对语言中元组的一流支持。所以它与其说是“用例”,不如说是语法糖。
https://softwareengineering.stackexchange.com/questions/348920
复制相似问题