2012-09-07 37 views
13

Tôi có hai mục trong lớp của mình: Một là thuộc tính công khai và phương thức kia là phương thức tĩnh có tham số.Sự mơ hồ giữa Mã số tĩnh và Ví dụ

Tôi thực sự không hiểu tại sao Visual Studio 2010 không thể thấy sự khác biệt giữa hai mục này.

Ai đó có thể giải thích điều này cho tôi không?

Đây là mã:

public bool IsShipped { 
    get { 
    #region ' Test Code ' 
    if (!String.IsNullOrEmpty(TrailerNo) || (TruckDate != Global.NODATE)) { 
     return true; 
    } 
    #endregion 
    return false; 
    } 
} 

public static bool IsShipped(string boxNumber) { 
    var array = GetCrate(boxNumber); 
    if (array != null) { 
    foreach (var item in array) { 
     if (item.IsShipped) { 
     return true; 
     } 
    } 
    } 
    return false; 
} 

Dưới đây là lỗi:

Error 1 Ambiguity between 'AcpClasses.AcpPackNShip.IsShipped' and 'AcpClasses.AcpPackNShip.IsShipped(string)' C:\Users\cp-jpool\My Projects\VS\Live\Common\Classes\AcpPackShip.cs 242 20 CoilPC

screenshot

Trả lời

10

Có thể tham khảo một phương pháp như một đại biểu, không chỉ bằng cách gọi nó. Ví dụ, sau đây có thể sẽ được sử dụng có hiệu lực của phương pháp này:

Func<string, bool> myFunction = item.IsShipped; 

Cho rằng phương pháp này không cần phải được thực sự gọi với ngoặc, không có cách nào xác định nếu item.IsShipped là nghĩa vụ phải tham khảo các nhóm phương pháp cho IsShipped hoặc trở thành tài sản IsShipped.

Thậm chí nếu đó là được phép, thì đó có thể là nguyên nhân gây nhầm lẫn. Nó sẽ là thích hợp hơn từ quan điểm bảo trì mã để có các tên khác nhau cho thuộc tính/phương thức, ngay cả khi trình biên dịch bằng cách nào đó đủ thông minh để biết cái nào cần sử dụng khi (hoặc tệ hơn, nếu nó chỉ chọn một tùy ý).

8

Bạn có thể quá tải phương pháp có chữ ký khác nhau, nhưng bạn không thể có một lĩnh vực hoặc thuộc tính có cùng tên với phương thức.

Đó là vì tên thô của phương pháp đánh giá thành nhóm phương pháp, được sử dụng khi tạo đại biểu.

Đoạn mã này rõ ràng cho thấy các vấn đề:

bool b = item.IsShipped; 
Func<string, bool> d = item.IsShipped; 
Các vấn đề liên quan