Lý do duy nhất tôi có thể nghĩ là đôi khi bạn cần viết các phương thức được bảo vệ để ghi đè lên các phương thức được bảo vệ khác. Ngôn ngữ thể đã được thiết kế để cho phép điều này:
protected override void Foo()
nhưng không này
protected void Foo()
nhưng điều đó có thể đã bị coi là một ít khó khăn để làm theo - đó là vắng mặt của override
mà làm cho nó vô dụng, trong khi trong trường hợp của
public virtual void Foo()
nó là hiện diện của virtual
đó là vô ích. Sự hiện diện của một cái gì đó "sai" có lẽ dễ hiểu hơn là sự vắng mặt của một cái gì đó hữu ích.
Trong trường hợp này, là ảo cũng có thể có tác động hiệu suất, trong khi thực hiện một cái gì đó được bảo vệ thay vì tư nhân có lẽ không - vì vậy nó là một chút nghiêm trọng hơn.
Đây chỉ là phỏng đoán mặc dù thực sự - nếu chúng tôi thực sự may mắn, Eric Lippert sẽ đưa ra một câu trả lời dứt khoát hơn. Anh ấy là một trong những bạn muốn, không phải là tôi :)
câu trả lời hay nhất: đối xử với cảnh báo là lỗi và chúng tương đương anyway;)
Nguồn
2009-07-21 13:39:38
Tôi muốn trả lời, nhưng vì một lý do nào đó tôi nghĩ JS sẽ có câu trả lời hay hơn. Hmm. –
Dường như JS đang ưu tiên SO tại THREAD_PRIORITY_BELOW_NORMAL - mọi người nhanh chóng nhận được câu trả lời của bạn trong khi bạn vẫn có thể! – cfeduke
+1 câu hỏi hay, tôi thậm chí không bao giờ chạy vào nguyên nhân này tôi thậm chí không bao giờ nghĩ đến việc này ... bởi vì nó không có ý nghĩa gì cả! –