Tôi không thể tìm ra cách sử dụng cho this code. Những gì sử dụng là mô hình này?Mã sử dụng này là gì?
[mã lặp đi lặp lại ở đây cho hậu thế]
public class Turtle<T> where T : Turtle<T>
{
}
Tôi không thể tìm ra cách sử dụng cho this code. Những gì sử dụng là mô hình này?Mã sử dụng này là gì?
[mã lặp đi lặp lại ở đây cho hậu thế]
public class Turtle<T> where T : Turtle<T>
{
}
Mẫu này về cơ bản cho phép bạn tham chiếu một lớp con cụ thể trong lớp cha. Ví dụ:
public abstract class Turtle<T> where T : Turtle<T>
{
public abstract T Procreate();
}
public class SeaTurtle : Turtle<SeaTurtle>
{
public override SeaTurtle Procreate()
{
// ...
}
}
Versus:
public abstract class Turtle
{
public abstract Turtle Procreate();
}
public class SnappingTurtle : Turtle
{
public override Turtle Procreate()
{
// ...
}
}
Trong cựu, nó xác định rằng một SeaTurtle
's bé sẽ là một SeaTurtle
.
Bạn có nghĩ rằng, loại điều này sẽ không được yêu cầu, nếu có hỗ trợ cho phương sai? – shahkalpesh
Nó có nhiều công dụng hơn. Nó có thể thực hiện các giao diện cho lớp con. Giống như, trong Java, 'java.lang.Enum' sử dụng mẫu để thực hiện' java.lang.Comparable' cho lớp con. Tôi chắc chắn C# có một cái gì đó tương tự. –
Chắc chắn có các cách sử dụng khác, nhưng tất cả chúng đều liên quan đến lớp cha cần sử dụng loại phân lớp của nó. Về việc triển khai giao diện, bạn có hai lựa chọn: triển khai giao diện cho T hoặc Turtle
Không có sử dụng mà tôi có thể nhìn thấy. Về cơ bản, nó giống như
public class Turtle
{
}
Nó không giống nhau vì trong đoạn mã đã cho, 'Rùa' không thể được khởi tạo. – strager
Có thể ... xem nhận xét của Marc Gravell tại đây http://stackoverflow.com/questions/194484/whats-the-strangest-corner-case-youve-seen-in-c-or-net/1332344#1332344 –
@Levesque, Và xem bình luận của RCIX sau. – strager
Rùa của nó tất cả các con đường ... – Juliet
Wha !? Tôi phải thiếu một cái gì đó ... –
Cần thêm rùa, nếu bạn hỏi tôi. – Corey