Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 4 123 ... CuốiCuối
Kết quả 1 đến 10 của 36
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi pkthanh92
    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.
    thanks
    có 1 người giống mình oài đây. Ngày xưa mình cũng như bạn nhưng khi đã hiểu về interface rồi thì bạn sẽ thấy nó hay ở chỗ nào. Mỗi thứ có 1 cái hay riêng bạn ah. Thời gian sẽ trả lời

  3. #3
    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ó

  4. #4
    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@@)

  5. #5
    Trích dẫn Gửi bởi pkthanh92
    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.
    thanks
    bạn dùng từ sai rồi, interface thì ko kế thừa (inherit) được , chỉ có implement interface thôi (dịch ra tiếng việt hơi chuối )

    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!

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @quocthong173: bạn nói cụ thể hơn đc ko.

    Trích dẫn Gửi bởi kenturo
    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ó
    Nếu phải cài đặt lại phương thức thì người ta nghĩ ra kế thừa lớp làm gì, chi bằng chỉ cho implement class cho đỡ rối hơn không.

    Trích dẫn Gửi bởi elkidvnn1
    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@@)
    câu trả lời của bạn đi lệch hướng của topic thì phải.

    Trích dẫn Gửi bởi zstar
    bạn dùng từ sai rồi, interface thì ko kế thừa (inherit) được , chỉ có implement interface thôi (dịch ra tiếng việt hơi chuối )

    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!
    //có cần thiết phải bắt lỗi đến vậy không
    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.

  7. #7
    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]

  8. #8
    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]

  9. #9
    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.

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Wazi Armstrong
    Trả lời: Để tránh gây phức tạp trong mã nguồn.


    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!?!!
    Như mình đã nói 1 cách đơn giản dễ hiểu. Bạn không thể đồng thời là con của loài người và loài "khác" được. Hướng đối tượng mà.

 

 
Trang 1 của 4 123 ... CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •