2012-04-25 28 views
7

Tại sao tôi không thể khai báo các đối số mặc định cho các hàm thành viên của một loại được quản lý hoặc các hàm chung? C# 4.0 đã giới thiệu Named and Optional Arguments; có một điều tương tự cho CLI?Đối số tùy chọn C++/CLI

Tôi không hiểu tại sao lại không thể khai báo một phương pháp như thế này:

void Optional(int argument = 0); 

Và sau đó khi tôi gọi Optional(); trình biên dịch không dịch cuộc gọi này vào: Optional(0);.

Trả lời

8

Dường như Trình biên dịch C++/CLI không phát ra chỉ thị IL chính xác cho điều đó. Nó không phát ra chỉ thị .param [1] = int32(0), mà C# sử dụng để nhận ra các tham số mặc định. Nếu bạn mở assembly được tạo ra trong ILDasm, bạn sẽ thấy nó.

Một cách mà biên dịch sẽ được sử dụng các thuộc tính OptionalDefaultParameterValue từ namespace System::Runtime::InteropServices, nhưng C# không sử dụng những thông số mặc định, vì vậy hiện nay không có cách nào dễ dàng xung quanh tạo ra một tình trạng quá tải.

Bạn có thể tìm thấy những câu hỏi hỏi về những thuộc tính ở đây: https://stackoverflow.com/a/4974528/93652

+0

Vì vậy, trình biên dịch C++/CLI không biết làm thế nào để tạo ra các chỉ thị. Tôi hy vọng rằng với VS (12?) Vấn đề sẽ được giải quyết. – gliderkite

+0

Tôi cũng hy vọng như vậy. Điều thú vị là dường như các ngôn ngữ xử lý điều này một cách khác nhau. Tôi nghe VB.Net làm điều đó bằng cách sử dụng các thuộc tính. Vì vậy, tôi đoán nó sẽ là tốt nhất nếu cả hai thuộc tính và chỉ thị được tạo ra. – Botz3000

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