2016-05-17 22 views
5

xem xét lớp này:Có lợi ích gì khi sử dụng tham số kiểu tham chiếu chung, nếu giao diện của lớp là contravariant?

class MyClass<T> where T: class // or T: BaseClass 
{ 
    void DoSomething1(T arg){ ... } 
    void DoSomething2(T arg){ ... } 
    ... 
    void DoSomethingN(T arg){ ... } 
} 

Và không có trở lại của T giá trị! Ngay cả trong thuộc tính hoặc trường được bảo vệ, vì vậy con cháu cũng không thể trả về số T.

Có lợi thế nào khi sử dụng tham số chung ở đây so với loại lớp cơ sở cứng không?

+1

Tôi không thấy vấn đề/câu hỏi ở đây. Tại sao bạn muốn có các hàm trả về 'T'? 'T' được sử dụng làm tham số. Trong ví dụ của bạn, ràng buộc đề cập đến khả năng 'referencial' của 'T'. Nếu bạn đã chọn 'T: BaseClass' thì có thể không có usecase để sử dụng một paramter chung. – ckruczek

+0

Tôi sẽ nói không, bởi vì tôi không thấy bất kỳ posibility để sử dụng các loại bê tông - nếu nó không thể được sử dụng, không có giá trị trong việc xác định nó. – JanDotNet

+0

@JNS Có thể có một số không gian để tối ưu hóa. Trong trường hợp khi T là một lớp niêm phong, trình biên dịch có thể phát ra một cuộc gọi mà không cần nhìn vào VMT? –

Trả lời

0

Không, không có lợi thế. Vì bạn chỉ chuyển các tham số thuộc loại T, về cơ bản, phương pháp của bạn về cơ bản là contravariant, vì vậy bạn cũng có thể khai báo tham số BaseClass thay vì một số T.

Các vấn đề liên quan