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

2023-12-21

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

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

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

就像是:

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

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

我所遗漏的这种设计选择是否有任何明显的原因?


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

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 方法应用为扩展方法。这些模式不可能通过单个接口实现实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 7:为什么元组解构不通过接口实现? 的相关文章