2012-02-04 6 views
6

Tôi đang cố gắng quá tải một toán tử trong C# (đừng hỏi tại sao!) Áp dụng cho Lists. Ví dụ: tôi muốn có thể viết:Xử lý quá tải C# với Danh sách <T>

List<string> x = // some list of things 
List<string> y = // some list of things 
List<string> z = x + y 

để 'z' chứa tất cả nội dung của 'x' theo sau là nội dung của 'y'. Tôi biết rằng đã có những cách để kết hợp hai danh sách, tôi chỉ cố gắng hiểu cách hoạt động của toán tử quá tải với các cấu trúc chung.

(Đây là lớp List từ Systems.Collections.Generic, bằng cách này.)

+0

'Danh sách' trong mẫu của bạn là triển khai của riêng bạn? Hoặc từ không gian tên 'System.Collections.Generic'? –

+0

Đó là từ System.Collections.Generic. – Joe

Trả lời

7

Theo như tôi biết, đây là không thể thực hiện được: bạn phải thực hiện quá tải toán tử trong các loại hình sử dụng nó. Vì List<T> không phải là loại của bạn, bạn không thể ghi đè toán tử trong đó.

Tuy nhiên, bạn có thể lấy được loại của riêng mình từ List<string> và ghi đè toán tử bên trong lớp học của bạn.

class StringList : List<string> { 
    public static StringList operator +(StringList lhs, StringList rhs) { 
    } 
} 
+2

Đừng quên rằng các toán tử được chọn dựa trên các loại biên dịch. Vì vậy, 'Liệt kê a = StringList mới(), b = new StringList(); var c = a + b' sẽ không hoạt động. – svick

+1

@svick Bạn hoàn toàn đúng, không thể lừa trình biên dịch bằng cách nào đó chấp nhận toán tử của bạn trên các toán hạng không được * tĩnh * gõ như lớp của bạn, nơi bạn đã định nghĩa toán tử. – dasblinkenlight

+0

Vậy tại sao tôi có thể quá tải '*' để làm việc với 'String', nhưng không phải 'Danh sách ' s? – Joe