Tôi nghĩ rằng tôi đã đóng đinh, và sau đó tôi đi xem một số nguồn tại nơi làm việc và tôi tự hỏi tại sao có rất nhiều mâu thuẫn trong những gì tôi đọc từ msdn và những gì tôi thấy trong nguồn. ...C# Virtual & Override Keywords
Hiểu biết của tôi là từ khóa ảo có thể được sử dụng trong khai báo phương pháp để cho phép mọi lớp phát sinh ghi đè lên.
Các từ khóa override sau đó sẽ cần phải được sử dụng trong các lớp được thừa kế khi thực hiện phương pháp ảo cha ....
Ví dụ:
public abstract class A
{
public virtual string GetName();
}
public class B:A
{
//assume there are some defined properties.
public override string GetName()
{
return FirstName;
}
}
Tôi có một vài câu hỏi:
1) Có thực sự cần thiết để xác định một phương thức là ảo nếu nó không thực hiện không? Chắc chắn nó chỉ có thể được ghi đè trong lớp con mà không sử dụng ảo và ghi đè?
2) Nếu (1) là không chính xác, tôi ngay trong suy nghĩ rằng mọi phương pháp ảo phải được ghi đè trong lớp con sử dụng nó ....
EDIT:
Bạn nói đúng mã của tôi sẽ không biên dịch ... tôi muốn biết tại sao .... tôi uinderstand câu trả lời của bạn, nhưng sau đó tôi thấy điều này:
public abstract class RequestHandler<TRequest, TResponse> : RequestHandler, IRequestHandler<TRequest>, IRequestHandler, IDisposable, ITypedRequestHandler
where TRequest : global::Agatha.Common.Request
where TResponse : global::Agatha.Common.Response, new()
{
protected RequestHandler();
public virtual void AfterHandle(TRequest request);
public virtual void BeforeHandle(TRequest request);
public override Response CreateDefaultResponse();
public TResponse CreateTypedResponse();
public override Response Handle(Request request);
public abstract Response Handle(TRequest request);
}
các doesnt trên gây ra trình biên dịch để phàn nàn ...
Ví dụ của bạn không biên dịch ("' A.GetName() 'phải khai báo nội dung vì nó không được đánh dấu là' abstract', 'extern', hoặc' partial' "). – dtb
Trình biên dịch lớp A của bạn có lưu ý tóm tắt thiếu của nó không? – V4Vendetta
Chắc chắn phương thức trong lớp A phải là chuỗi trừu tượng công khai GetName(); – Vedran