首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# 7:为什么不通过接口实现元组解构?

C# 7:为什么不通过接口实现元组解构?
EN

Stack Overflow用户
提问于 2017-09-25 20:53:39
回答 1查看 751关注 0票数 5

在C# 7中,我们可以实现一个Deconstruct方法,当将一个对象分配给具有匹配类型的元组时,将调用该方法。

我想知道为什么微软决定把它作为一个“神奇的方法”来实现。有一个特别命名的方法,它不是从任何地方继承的,如果你正确地命名它并放入正确的参数,那么你将能够将这个对象分配给相应的元组。

我可以想象,设计团队会为此创建一个界面。

类似于:

代码语言:javascript
复制
public interface IDecontructible<T1>
{
    void Deconstruct(out T1 a);
}

public interface IDecontructible<T1, T2>
{
    void Deconstruct(out T1 a, out T2 b);
}

public interface IDecontructible<T1, ... ,Tn>
{
    void Deconstruct(out T1 a, ... ,out Tn n);
}

当然,必须有更多的接口和不同数量的参数。

这个设计选择有没有什么明显的原因,就是我错过了?

EN

回答 1

Stack Overflow用户

发布于 2017-09-25 21:02:15

因为使用解构的方式,你可以重载它,它可以应用于任何对象。如果它是一个接口,那么团队将不得不返回并将其应用于他们希望拥有它的功能的每一种类型,并且他们将需要为每个方法签名使用不同的方法签名,这是不可行的。例如。

代码语言:javascript
复制
class Employee {
   public string FirstName {get;set;}
   public string Id {get;set;}

   Deconstruct (out string firstName){
    firstName = FirstName;
   }

   Deconstruct (out string firstName, out string LastName){
    firstName = FirstName;
    lastName = LastName;
   }

   Deconstruct (out int id){
    id = EmployeId; 
   }
}

使用当前的实现,您可以有三个版本的解构。此外,您还可以将Deconstruct方法作为扩展方法应用。这些模式在单个接口实现中是不可能的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46405775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档