2010-05-15 30 views
8

Tôi có một lớp cơ sở cho một số công cụ kiểu plugin và có một số phương pháp tuyệt đối bắt buộc phải được triển khai.Có được phép ném ngoại lệ NotImplemented trong các phương thức ảo không?

Tôi hiện tuyên bố những người trong lớp cơ sở như ảo, ví dụ

public virtual void Save 
{ 
    throw new NotImplementedException(); 
} 

và trong descendand Tôi có một

public override void Save() 
{ 
    //do stuff 
} 

Có một thực hành tốt để ném một NotImplementedException đó? Các lớp con cháu có thể là các mô-đun để xử lý các định dạng tệp khác nhau. Cảm ơn

Trả lời

13

Nói chung tôi hy vọng rằng lớp cơ sở của bạn sẽ trừu tượng và chỉ trì hoãn việc triển khai cho các lớp kế thừa.

public abstract class MyBase 
{ 
    public abstract void Save(); 
    ... 
} 

public class MyChild : MyBase 
{ 
    public override void Save() 
    { 
     ... save ... 
    } 

    ... 
} 
8

trừu tượng dường như là những gì bạn đang thực sự sau đó.

8

Sẽ không tốt hơn nếu khai báo nó như một phương pháp trừu tượng?

Bằng cách đó, tất cả các loại triển khai cũng sẽ phải triển khai phương pháp này.

10

Không phải là ý hay.

Thông thường, phương pháp trọng sẽ gọi phương thức cơ sở đẳng cấp qua

base.Save() 

và đó sẽ puke mỗi lần.

Vì vậy, thường là ý tưởng tồi. Trong trường hợp của bạn, có vẻ như làm cho nó trừu tượng sẽ là sự lựa chọn tốt hơn.

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