2013-01-22 32 views
5

thời gian gần đây tôi đã có một định nghĩa lớp WinRT với các phương pháp như thế này:Tại sao DefaultOverloadAttribute được yêu cầu trong WinRT?

public void Foo(string x){} 
public void Foo(CustomClass x){} 

Trình biên dịch ném một lỗi dù rằng

Các quá tải 1-tham số của Earlz.FooBar phải có đúng một phương pháp quy định như quá tải mặc định bằng cách trang trí nó với Windows.Foundation.Metadata.DefaultOverloadAttribute.

Điều này có ý nghĩa gì? Tôi không quen với cách các dự án WinRT hoạt động, nhưng những gì tôi đang viết cuối cùng sẽ là một API có thể sử dụng công khai. Vì vậy, tôi muốn đảm bảo rằng tôi không làm điều gì đó sẽ gây đau cho những người sử dụng API. Tôi có nên đổi tên phương thức Foo thành FooCustom hoặc một số cách như vậy hoặc đang sử dụng DefaultOverload trên chức năng được sử dụng phổ biến hơn không?

Ngoài ra, tôi cố gắng nhìn lên những gì thuộc tính này không và tại sao nó cần thiết, nhưng MSDN là ngắn hạn về chi tiết như bình thường và chỉ cho mô tả câu duy nhất "Chỉ ra rằng một phương pháp là phương pháp quá tải mặc định"

tôi giả lý do chính cho thuộc tính này là vì Javascript chỉ hỗ trợ quá tải trên số tham số, không hỗ trợ kiểu tham số. Tuy nhiên, làm thế nào một ứng dụng Javascript có thể truy cập các phương thức WinRT không mặc định với quá tải kiểu?

+0

Không có tác động gì. Microsoft đã quyết định yêu cầu các lập trình viên định nghĩa quá tải mặc định cho các phương thức. –

+0

@Ramhound nhưng làm thế nào sẽ làm việc nếu một ngôn ngữ không hỗ trợ quá tải? – Earlz

+2

@Ramhound Ví dụ, trong Javascript nó sẽ không thể biết được tình trạng quá tải nào được gọi vì nó chỉ xác định tình trạng quá tải trên số tham số, không phải trên kiểu tham số (do động) – Earlz

Trả lời

4

Như Jesse Giang mô tả trong this thread:

JavaScript đã hạn chế khả năng phân biệt các phương pháp quá tải. Vì vậy, bạn cần phải thay đổi tên hàm, hoặc thiết lập Windows :: Foundation :: Metadata :: DefaultOverloadAttribute để thiết lập chức năng quá tải mặc định.

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