2010-01-07 32 views
19

Tại sao C# yêu cầu các toán tử quá tải là các phương thức tĩnh chứ không phải các hàm thành viên (như C++)? (Có lẽ cụ thể hơn: động lực thiết kế cho quyết định này là gì?)Tại sao C# quá tải của nhà điều hành phải là tĩnh?

+0

C++ cho phép các toán tử được miễn phí (ví dụ: không phải thành viên). Nhưng C# đã quyết định đặt lệnh cấm Stalin vào các chức năng miễn phí, vì vậy bạn phải đặt tĩnh ở đó. –

Trả lời

26

Hãy xem this post.

Một vài lý do, dường như chính là để bảo toàn tính đối xứng của nhà điều hành (như phía bên tay trái của thao tác nhị phân không được xử lý đặc biệt, vì chịu trách nhiệm điều phối hoạt động).

30

trả lời một cách chi tiết dữ dội ở đây:

http://blogs.msdn.com/ericlippert/archive/2007/05/14/why-are-overloaded-operators-always-static-in-c.aspx

Ngoài ra còn có một điểm tinh vi hơn về kiểu giá trị và các nhà khai thác ví dụ. Toán tử tĩnh làm cho loại mã này có thể:

class Blah { 

    int m_iVal; 

    public static Blah operator+ (Blah l, int intVal) 
    { 
     if(l == null) 
      l = new Blah(); 
     l.m_iVal += intVal; 
     return l; 
    } 
} 

//main 
Blah b = null; 
b = b + 5; 

Vì vậy, bạn có thể gọi toán tử, mặc dù tham chiếu là rỗng. Điều này sẽ không phải là trường hợp cho các nhà khai thác dụ.

+0

sẽ kiểm tra màu xanh lá cây để @Sapph chỉ gây ra bạn đã có waaaay rep hơn :) – dkackman

+0

lol tôi thấy đại diện đi lên và sau đó xuống cho như một giây. Cũng xứng đáng, Sapph nỗ lực nhiều hơn vào câu trả lời. –

+3

+1 cho đoạn mã tuyệt vời: D – Sapph

0

Có lẽ cách tốt nhất để suy nghĩ tại sao các phương pháp không được tĩnh. Không cần cho nhà nước và do đó điều này.

+0

Có thể không có lợi ích của nhà nước nhưng có quá tải toán tử ảo sẽ rất tuyệt. Điều nhà nước không phải là lý do tại sao nó không có sẵn trong C#. –

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