Các mã sau đây có một phương pháp tĩnh, Foo()gọi một phương pháp dụ, Bar():
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Nó biên dịch mà không có lỗi * nhưng tạo ra một ngoại lệ chất kết dính thời gian chạy trong thời gian chạy. Loại bỏ tham số động đối với các phương thức này gây ra lỗi trình biên dịch, như mong đợi.
Vậy tại sao có một tham số động lại cho phép mã được biên dịch? ReSharper cũng không hiển thị nó là một lỗi.
Chỉnh sửa 1: * trong Visual Studio 2008
Chỉnh sửa 2: được thêm vào sealedvì có thể một lớp con có thể chứa một Bar(...)phương thức tĩnh . Ngay cả phiên bản niêm phong cũng biên dịch khi không thể gọi bất kỳ phương thức nào khác với phương thức phiên bản trong thời gian chạy.
dynamictrừ khi bạn thực sự cần.