Hãy xem xét các loại sau đây:phương pháp trừu tượng với kiểu trả mạnh mẽ gõ
public abstract class Animal
{
public abstract Animal GiveBirth();
}
public class Monkey : Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
public class Snake : Animal
{
public override Animal GiveBirth()
{
return new Snake();
}
}
//That one doesnt makes sense.
public class WeirdHuman: Animal
{
public override Animal GiveBirth()
{
return new Monkey();
}
}
Tôi đang tìm kiếm một cách để thực thi các kiểu trả về của phương pháp overrided GiveBirth
để nó luôn luôn trả về kiểu lớp thực tế, do đó không WeirdHuman
có thể sinh một số Monkey
.
Tôi cảm thấy câu trả lời là về các loại chung chung, nhưng tôi không thể thấy cách tôi có thể làm điều đó.
dụ về kết quả mong đợi:
public abstract class Animal
{
public abstract /*here a way to specify concrete type*/ GiveBirth();
}
public class Monkey : Animal
{
public override Monkey GiveBirth() //Must returns an actual Monkey
{
return new Monkey();
}
}
"Tuyệt đối không thể" thể được một câu trả lời, nếu giải thích rõ ràng.
Đó là những gì tôi nghĩ. Tôi không thể thấy bất kỳ cách nào để xác định rằng loại chung phải thực hiện loại lớp thực tế. Giống như 'nơi T: this' hoặc một cái gì đó ... – Johnny5
Các ngôn ngữ hỗ trợ nó là gì? – Johnny5
Java hỗ trợ nó. Không có gì. Net hỗ trợ nó như CLR là vấn đề cơ bản. Hy vọng rằng một phiên bản tương lai sẽ thêm hỗ trợ, nhưng như tôi hiểu nó sẽ có một thay đổi đáng kể để làm cho nó hoạt động. –