gpt4 book ai didi

.net - C# 7 : Why is tuple deconstruction not implemented through an interface?

转载 作者:行者123 更新时间:2023-12-04 17:15:55 24 4
gpt4 key购买 nike

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

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

这种设计选择是否有任何明显的原因,我错过了?

最佳答案

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

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 方法用作扩展方法。这些模式对于单个接口(interface)实现是不可能的。

关于.net - C# 7 : Why is tuple deconstruction not implemented through an interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46405775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com