-
13-01-2012, 05:05 PM #1Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Tại sao C# không hỗ trợ đa kế thừa lớp ?
học c# mình thấy môt điểm khó hiểu là trong C# cho đa kế thừa interface nhưng lại không cho đa kế thừa class, không biết nguyên do sâu xa trong vấn đề này là gì ?, các pro chỉ giúp với.
thanksView more random threads:
- Các bác giúp cho en cách ẩn thanh tiêu đề
- Tên button tự động thay đổi sau mỗi giây?
- thêm lệnh vào context menu cho riêng một folder
- Làm sao để xác định từng dòng của mảng 2 chiều b có phải là tập con của mảng 1 chiều a
- Cách bắt thời gian của mail về và mail đi
- lấy tọa độ của 1 đối tượng bên trong đối tượng khác trong lập trình WPF?
- Cách tạo và Gán quyền cho từng user trong asp.net C#?
- Copy một cột dữ liệu trong GridControl của DevExpress
- lỗi expected } before int
- nạp chồng toán tử trên C# như thế nào??
-
13-01-2012, 05:18 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi pkthanh92
-
13-01-2012, 05:21 PM #3Silver member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
mún đa kế thừa thì như bạn trên nói đó, mần cái Interface đi, nó cũng giống như mấy cái kia thôi chỉ khác ở chỗ là fai cài đặt lại phương thức trong nó
-
13-01-2012, 05:49 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Chắc là thế này. Bạn là người thì chắc bạn ko thể nào con của 1 lớp "thú" nào khác. MÀ đôi lúc bạn chỉ mang bộ mặt của "thú" hoặc 1 số hành động giống nó thôi. Nhưng bản chất thì vẫn là người. Say quá không biết có nói bậy ko(đây chỉ là ví dụ chứ ko có ý đả kick nha@@)
-
13-01-2012, 06:09 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi pkthanh92
inherit vs implement là 2 khái niệm khác nhau nhé
trong C#,Java :
- 1 class chỉ có thể inherit 1 class duy nhất
- 1 class có thể implement nhiều interface
regards!
-
13-01-2012, 06:24 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
@quocthong173: bạn nói cụ thể hơn đc ko.
Gửi bởi kenturo
Gửi bởi elkidvnn1
Gửi bởi zstar
bạn cũng nhầm rồi, interface hoàn toàn có thể kế thừa một interface khác.
vậy cuối cùng, tại sao C# không cho kế thừa nhiều lớp.
-
13-01-2012, 06:37 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
haizz !
có lẽ ai học java thì hiểu hơn nó sinh ra 2 từ khóa extends,implement là rất có lý. học C# 2 từ khóa nó nhập làm 1 thành dấu : làm người ta chả hiểu thế nào là kế thừa,thế nào là implement. bắt đầu chán hàng của Microsoft rồi [IMG]images/smilies/biggrin.png[/IMG]
ps: ghét cay ghét đắng cái đa kế thừa của C++, Java & C# vứt khái niệm đa kế thừa là hoàn toàn có lí.
ngủ thôi [IMG]images/smilies/wave.gif[/IMG]
-
13-01-2012, 06:38 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Trả lời: Để tránh gây phức tạp trong mã nguồn.
Bạn chắc nghe qua Diamond Problem trong C++ rồi (B và C cùng kế thừa A và cùng ghi đè method f, đến lượt D kế thừa cả B và C, vậy khi gọi f của 1 đối tượng lớp D, ta phải chỉ rõ ra rằng nó gọi phương thức f của B hay của C)
Điều này làm cho phức tạp mã lệnh. Hơn nữa, khi chương trình được phát triển bởi nhiều người, việc quyết định gọi f của B hay C đôi khi ko dễ dàng nếu như cái đám trên được phát triển từ một người khác... và còn nhiều điều rắc rối nữa
Diamond chỉa là ví dụ cơ bản nhất. Thử tưởng tượng những trường hợp phức tạp hơn. E kế thừa từ D và A, vậy nếu ta gọi f của E thì sao??? Trong 1 chương trình, khi mà cái cấu trúc phân cấp đã đủ phức tạp thì thực sự nó trở thành 1 đống hỗn độn!?!!
Ah bổ sung phát, tự nhiên nhớ đến môn Structure Programming vừa học kì vừa rồi
Bạn biết loosely coupling không? Đa kế thừa làm tăng tính cặp đôi (couple) của các module và điều này làm giảm tính cấu trúc của chương trình.
Trở lại với ví dụ trên, giờ bạn muốn thay hàm f trong D bằng 1 hàm viết tốt hơn bằng cách ghi đè 1 trong 2 hàm của B và C, vậy chuyện gì xảy ra với E??? Có trời mà biết được [IMG]images/smilies/laughing.gif[/IMG]
PS: Trên mạng (stackoverflow) đã có những bài viết khá hay về vấn đề này, chịu khó tìm và bạn sẽ ngộ đạo [IMG]images/smilies/laughing.gif[/IMG]
-
13-01-2012, 06:47 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nếu sợ "Diamond" thì chỉ cần khuyến cáo lập trình viên không nên dùng đa kế thừa, tại sao lại disable nó đi, chẳng lẽ C# không sợ mất đi những ưu điểm của đa kế thừa mang lại ?, phải có một nguyên nhân khác.
-
13-01-2012, 06:59 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Wazi Armstrong
Pallet nhựa Long An đã trở thành một trong những lựa chọn phổ biến cho nhu cầu vận chuyển và lưu trữ hàng hóa trong nhiều ngành công nghiệp. Với đặc tính nhẹ nhàng, chắc chắn và dễ vận chuyển, các...
Thanh lý pallet nhựa Long An giá rẻ