2010-10-17 38 views
5

Giả sử tôi có một ViewModel TabViewModel mở rộng ObservableObject lớp cho ViewModels trong Khuôn khổ nền tảng MVVM. Sau đó, tôi cũng có một số EditorTabViewModel kéo dài TabViewModel, Bây giờ tôi cần mở rộng DependencyObject để triển khai DependencyProperties. Tôi không thể kéo dài quá 1 lớp. Làm thế nào tôi có thể thực hiện điều này? Tôi có thể có lớp "trung gian" như ...C#: Mở rộng từ hơn 1 lớp

TabViewModel : ObservableObject 

EditorTabViewModel : TabViewModel 

DependentEditorTabViewModel : DependencyObject 

nhưng đó là thêm 1 lớp không cần thiết. Bất kỳ cách nào tốt hơn để làm điều này?

CẬP NHẬT

Ops thực sự tôi không thể làm các việc trên. DependentEditorTabViewModel vẫn cần mở rộng EditorTabViewModel ... ngoài DependencyObject

Trả lời

1

Đây không phải là lớp phụ nếu bạn hoàn thành những gì bạn cần. Dưới đây là cách bạn sẽ thực hiện điều đó:

DependentEditorTabViewModel : DependencyObject 

TabViewModel : DependentEditorTabViewModel 
+0

Tôi nghĩ mình đã phạm sai lầm tương tự ... ngoài 'DependencyObject', tôi vẫn cần mở rộng' ObservableObject'. Nói cách khác, tôi cần lớp kết quả để mở rộng chủ yếu 'DependencyObject',' ObservableObject'. –

+0

Ok. Thật không may, C# không hỗ trợ đa kế thừa. Thay vào đó hãy xem xét triển khai giao diện. –

2

C# không hỗ trợ Multiple Inheritance. Đặt cược tốt nhất của bạn là sử dụng Giao diện, thay vì các lớp cha mẹ.

Thậm chí nếu bạn không có tùy chọn sử dụng giao diện (có thể bạn không có quyền truy cập vào mã), thì thường tốt hơn là prefer composition over inheritance. Bạn có thực sự cần phải kế thừa cả hai lớp này hoặc bạn có thể soạn với họ thay thế không?

+0

Trong kịch bản trên của tôi, làm thế nào tôi có thể thực hiện thành phần trên thừa kế? Tôi đọc về điều đó b4 nhưng trong trường hợp này, có lẽ tâm trí của tôi không hoạt động tốt :) –

+0

@jiewmeng: Tôi sợ tôi không biết gì về Khung nền tảng MVVM, vì vậy tôi không thể giúp đỡ các chi tiết. Lấy làm tiếc. –