2011-12-14 30 views
8

Tôi vô tình bắt gặp trang này new keyword in method signature và tôi thấy rằng một số ví dụ được đưa ra trong bài đăng này không chính xác (ví dụ: Thứ hai)Từ khóa "mới" trong C# chỉ để làm cho cảnh báo biến mất, phải không?

Tôi nghĩ rằng "mới" đã có sẵn nếu bạn không nói "ghi đè ". Sự khác biệt duy nhất là bạn sẽ nhận được đường màu xanh (warrning?) Nếu bạn không viết "ghi đè" (cho phương thức ảo) hoặc "mới". Bạn vẫn có thể chọn không viết "mới" và nó vẫn hoạt động. Tôi có đúng khi nói điều này, hay tôi đang thiếu một cái gì đó quan trọng?

+1

Đây là dupe - http://stackoverflow.com/questions/3117838/why-do-we-need-the-new-keyword-and-why-is-the-default-behavior-to-hide-and -not-o –

+3

Nhìn vào câu trả lời này từ Eric Lippert http://stackoverflow.com/a/3118480/149190 –

+0

với điều thứ hai tôi nghĩ bạn có ý nghĩa như sau: http://stackoverflow.com/a/1014309/112407 (không phải tất cả đều có thứ tự sắp xếp tương tự) thực sự chính xác và nổi bật vì sao đó là cảnh báo. Mã có thể rất tốt làm điều gì đó khác mà mong muốn được mong đợi. các loại thời gian biên dịch ít khi quan trọng hơn kiểu thời gian chạy nhưng trong trường hợp này nó là –

Trả lời

10

Có nó không làm bất cứ điều gì ngoại trừ ẩn cảnh báo đó.

Cảnh báo chỉ có ở đó để đảm bảo bạn biết mình đang làm gì, vì việc che giấu hiếm khi là ý tưởng hay. Nhưng làm cho override mặc định sẽ gây ra các vấn đề về phiên bản nếu lớp cơ sở đưa ra một phương thức ảo mới và lớp dẫn xuất xảy ra có một phương thức kết hợp nhưng độc lập mà bây giờ vô tình ghi đè phương thức kế thừa.

1

Tôi tin rằng đó là cơ bản để bạn có thể nêu rõ ý định trong mã của mình.

Vì vậy, nếu bạn muốn ẩn một phương thức trong một lớp cơ sở, bạn sử dụng chỉ thị mới để tự nói với chính mình và những người khác, rằng bạn đã cố tình làm điều đó. tức là bạn đã không thêm một phương thức hoàn toàn mới có cùng tên như một onne hiện có trong sự thiếu hiểu biết.

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