2011-10-12 30 views
5

Tôi tình cờ thấy mã như thế này.nhập kiểu động trong tham số trong C#

function((dynamic) param1, param2); 

Khi nào và tại sao chúng tôi cần loại đúc động này cho thông số?

+0

Tôi muốn xem thêm. Nói chung, nếu hàm này có biến động bạn * có thể * truyền, nhưng không cần thiết. – scottm

+0

@scottm: Đó là những gì tôi đã suy nghĩ ban đầu, sau đó tôi nhớ bạn cũng có thể sử dụng nó để chọn quá tải chính xác của một phương pháp tại thời gian chạy. –

+0

@JamesMichaelHare Trường hợp sử dụng rất nhỏ. Đây là loại điều tôi sẽ mắng một nhà phát triển trước đó để sử dụng có chủ ý. – scottm

Trả lời

5

Nó có thể được sử dụng để tự động chọn một tình trạng quá tải của function(...) dựa vào loại param1 khi chạy, ví dụ:

public static void Something(string x) 
{ 
    Console.WriteLine("Hello"); 
} 

public static void Something(int x) 
{ 
    Console.WriteLine("Goodbye"); 
} 
public static void Main() 
{ 
    object x = "A String"; 

    // This will choose string overload of Something() and output "Hello" 
    Something((dynamic)x); 

    x = 13; 

    // This will choose int overload of Something() and output "Goodbye" 
    Something((dynamic)x); 
} 

Vì vậy, mặc dù x là một tham chiếu đến object, nó sẽ quyết định trong thời gian chạy gì quá tải của Something() để gọi. Lưu ý rằng nếu không có quá tải thích hợp, ngoại lệ sẽ bị ném:

// ... 
    x = 3.14; 

    // No overload of Something(double) exists, so this throws at runtime. 
    Something((dynamic)x); 
Các vấn đề liên quan