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

时间:2017-09-25 12:53:39

标签: .net c#-7.0

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

我想知道为什么微软决定将其作为一种魔术方法来实现#34;。有一个特别命名的方法不会从任何地方继承,如果你正确命名并放入正确的参数,那么你将能够将这个对象分配给相应的元组。

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

类似的东西:

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);
}

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

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

1 个答案:

答案 0 :(得分:10)

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

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。此外,您可以将Deconstruct方法应用为扩展方法。单个接口实现无法实现这些模式。