Trong C# 7 chúng ta có thể thực hiện một phương thức Deconstruct
sẽ được gọi khi gán một đối tượng cho một bộ tuple với các loại đối sánh.C# 7: Tại sao việc giải mã tuple không được thực hiện thông qua giao diện?
Tôi tự hỏi tại sao Microsoft lại quyết định thực hiện điều này như một "phương pháp ma thuật". Có phương thức được đặt tên cụ thể này không được kế thừa từ bất cứ đâu và nếu bạn đặt tên đúng và đặt các tham số chính xác, thì bạn sẽ có thể gán đối tượng này cho bộ tuple tương ứng.
Tôi sẽ tưởng tượng rằng nhóm thiết kế sẽ tạo ra một giao diện cho mục đích này.
Cái gì như:
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);
}
Tất nhiên có sẽ phải có nhiều giao diện với số lượng khác nhau của tham số.
Có lý do rõ ràng nào cho lựa chọn thiết kế này không, tôi đang thiếu?
FWIW ghi chú thiết kế cho bit cụ thể này [có tại đây] (https://github.com/dotnet/csharplang/blob/master/meetings/2016/LDM-2016-05-03-04.md), với các cuộc thảo luận thêm [liên kết từ trang Deconstruction chính] (https://github.com/dotnet/roslyn/blob/master/docs/features/deconstruction.md). –
Suy luận về các Tên sẽ không thể thực hiện được với các giao diện. –