2012-03-30 41 views
6

Để thích ứng với thử nghiệm đơn vị và chế nhạo, nó trở thành một thực tế phổ biến để khai báo các phương thức và thuộc tính là ảo. Có tác động hiệu quả nào khi tuyên bố điều gì đó ảo như được cho là phi ảo không?Hiệu suất hoạt động của các phương pháp ảo

+0

Bạn nghĩ rằng _design cho testability_ chỉ làm mọi thứ 'virtual' và tất cả các lớp' mở'? Hmm ... –

+0

@StefanHanke: Tôi không thấy bất cứ điều gì cho thấy OP cho rằng đó là * chỉ * đó. –

+0

Vâng tôi không nghĩ rằng nó nên được thực hiện khi nó không cần thiết ... Nó chỉ là một biện pháp có thể cải thiện khả năng kiểm tra khi thích hợp – TGH

Trả lời

9

Nói chung, sự khác biệt là các phương pháp ảo được gọi bằng cách sử dụng một mã số Callvirt, trong khi đó các phương thức ảo không sử dụng mã gọi Opcode chuẩn. Gọi Opcodes chắc chắn nhanh hơn Callvirt, nhưng tôi chưa bao giờ tìm thấy nó gần như đủ lớn để biện minh cho việc đưa ra quyết định thiết kế dựa trên điều này.

Premature optimization is the root of all evil.

+0

IIRC, trình biên dịch C# sẽ sử dụng CallVirt cho tất cả các phương pháp dụ, bất kể chúng là ảo. Bằng cách đó CLR thực hiện kiểm tra vô hiệu. –

+0

@JohnSkeet Vậy điều đó có nghĩa là vào cuối ngày thực sự không có sự khác biệt? – TGH

+0

Điểm tốt John - bạn đúng với ngoại lệ của các phương thức thể hiện kiểu giá trị mà tôi nghĩ - mà trình biên dịch phát ra một Opcodes.Call. – Jeff

1

Không, không thực sự.

Đây không phải là điều bạn sẽ chú ý.

1

Tôi không biết chi tiết cụ thể, nhưng tôi biết rằng bạn không cần phải lo lắng về nó với giá 99% các ứng dụng ra khỏi đó.

btw - Nếu chọn giao diện Mock thay vì lớp, bạn sẽ không cần phương thức ảo.

Chúc may mắn, Tom

+0

Bạn có cùng một 'hình phạt' với giao diện như một phương thức ảo. – leppie

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