2012-01-25 28 views
8

thể trùng lặp:
Generic constraints, where T : struct and where T : classKhông có khả năng quá tải phương pháp chung với các ràng buộc kiểu

Có một lý do cụ thể mà bạn không thể quá tải phương pháp chung sử dụng loại chế loại trừ lẫn nhau trong C#? Ví dụ, có những phương pháp:

T DoSomething<T>(T arg) where T : class 
{ /* Do something */ } 

T DoSomething<T>(T arg) where T : struct 
{ /* Do something */ } 

và cố gắng gọi chúng với

DoSomething("1"); 
DoSomething(1); 

Con đường tôi nhìn thấy nó, các DoSomething() phương pháp loại trừ lẫn nhau như xa như các thông số mà họ sẽ mất - cái đầu tiên có kiểu tham chiếu, kiểu thứ hai lấy một kiểu giá trị. Trình biên dịch sẽ có thể nói rằng cuộc gọi DoSomething với một đối số chuỗi đi đến phương thức đầu tiên và cuộc gọi DoSomething với đối số int đi đến phương thức thứ hai.

Tôi có thiếu cái gì đó mang tính khái niệm với generics ở đây không? Hay đây chỉ là một tính năng không được triển khai trong C#?

+1

văn bản trùng lặp này có thể được cải thiện bằng cách thêm một liên kết đến câu trả lời trùng lặp. Nó thực sự bực bội nếu bạn không thể tìm thấy một giải pháp và tìm kiếm không trả lại bất kỳ kết quả nào, hoặc cách nào, quá nhiều kết quả. –

Trả lời

8

chế Generic không nằm trong phương pháp chữ ký

Xem câu trả lời này Generic contraints on method overloads

Jon Skeet blog post on the topic

+0

Các liên kết được cung cấp trong câu trả lời này hiện bị hỏng (tính đến ngày 26/4/2015). – devinbost

+0

@bostIT Huh. Tôi tự hỏi điều gì đã xảy ra với blog của Jon. Tôi sẽ xem liệu tôi có thể tìm thấy liên kết được cập nhật hay không. – asawyer

+0

@bostIT Tìm thấy bản cập nhật và sửa liên kết – asawyer

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