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 sealed
vì 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.
dynamic
trừ khi bạn thực sự cần.