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

    Sự khác biệt giữa new, virtual và override ?

    Mình đọc đến đây thì thấy:

    1.Hai cấu trúc này là như nhau
    2.new cú pháp ngắn gọn hơn
    3.Tuy nhiên mỗi cái có cách hiểu riêng:

    <div>
    <div>

    3.1 new : Ý nghĩa tạo một phiên bản mới
    3.2 virtual && override: Ý nghĩa phủ quyết( rõ ràng hơn)
    4.Nhưng dùng new thì hay hơn cả ( tránh được khi lớp base có thay đổi lại phương thức ).


    </div>
    </div>Những nhận xét đó đúng và sai ở đâu? Vui lòng chỉ giúp và bổ xung hộ.
    Thanks!

  2. #2
    Cái này liên quan đến tính đa hình (Polymorphism)

    1. Nếu xài override :
    Mã nguồn PHP:
    // Base Class class BaseClass { public virtual void DoSomeThing() { Console.WriteLine("I'm solokop"); } } // Derived Class class DerivedClass : BaseClass { public override void DoSomeThing() { Console.WriteLine("I'm koploso"); } } // Test Driver public static void Main() { BaseClass b = new DerivedClass(); DerivedClass d = new DerivedClass(); b.DoSomeThing(); d.DoSomeThing(); } // Result I'm koploso I'm koploso  
    2. Nếu xài new :
    Mã nguồn PHP:
    // Base Class class BaseClass { public virtual void DoSomeThing() { Console.WriteLine("I'm solokop"); } } // Derived Class class DerivedClass : BaseClass { public new void DoSomeThing() { Console.WriteLine("I'm koploso"); } } // Test Driver public static void Main() { BaseClass b = new DerivedClass(); DerivedClass d = new DerivedClass(); b.DoSomeThing(); d.DoSomeThing(); } // Result I'm solokop I'm koploso  
    Có gì chưa hiểu cứ hỏi nhc1990 nha [IMG]images/smilies/clap_grin.gif[/IMG]

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Dù sao cũng cảm ơn solokop [IMG]images/smilies/online.gif[/IMG] .
    Tuy nhiên tôi chỉ hỏi những nhận xét của tôi có đúng không? và mong được bổ xung chứ không có ý là hỏi về cấu trúc phải viết như thế nào.

    @nhc2000: Cho hỏi chút, cái abstract:
    1.Nếu muốn phương thức là abstract thì lớp trước tiên phải là abstract?
    Tôi test và nhận thấy như vậy.
    À cậu có tài liệu về form không up lên cho mọi người với.Tôi đang đọc cái C# Professional Projects mà hình nó mờ quá , mỏi hết cả mắt luôn.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    @ NT_OnlyLOve : Thì cậu đọc code trên tất nhiên sẽ tự biết là nhận xét của mình có đúng hay không (Chứ code trên đâu có dạy cậu cách viết cấu trúc hay cú pháp gì đâu).

    New : Tạo một phiên bản mới cho một method không ràng buộc với phiên bản cũ ở lớp cha (hay nói cách khác nó tự ẩn cái method cũ đi)

    Override : Ghi đè lên thằng cũ, chú ý là thằng cũ vẫn tồn tại song song với thằng mới. Tùy vào kiểu của lớp (đối tượng) được khai báo sẽ có phương thức phù hợp được gọi.

    P/S : Mấy cái code trên chưa test đâu nha T_T. Còn vụ ebook thì cứ hỏi nhc2005 đó, hắn có nhiều sách lắm

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Solokop
    @ NT_OnlyLOve : Thì cậu đọc code trên tất nhiên sẽ tự biết là nhận xét của mình có đúng hay không (Chứ code trên đâu có dạy cậu cách viết cấu trúc hay cú pháp gì đâu).

    P/S : Mấy cái code trên chưa test đâu nha T_T. Còn vụ ebook thì cứ hỏi nhc2005 đó, hắn có nhiều sách lắm
    Ừm cảm ơn Solokop nhiều, nhưng cái mình hiểu đều đúng sau khi code.

    Mọi người cho hỏi chút về sealed:
    Trong ebook nói sealed class không cho khai báo protected , vậy mà mình khai báo vẫn được. Mình thử đi thử lại mà vẫn không có vấn đề gì.[IMG]images/smilies/waiting.gif[/IMG]
    Vậy mọi người code hộ mình đoạn nó không cho phép nhé.
    Thanks.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi NT_OnlyLove
    Mình đọc đến đây thì thấy:

    Những nhận xét đó đúng và sai ở đâu? Vui lòng chỉ giúp và bổ xung hộ.
    Thanks!
    Hình như cái này liên quan đến cả cấp kế thừa,new là dùng trong trường hợp kế thừa trực tiếp,còn cái kia là dùng trong kế thừa đa cấp thì phải(đọc được ở đâu đó[IMG]images/smilies/thinking.gif[/IMG] )

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Các đại ca cho em hỏi thêm với:
    Thế có new và không có new khác nhau gì vậy(hình như trong c++ không phân ra hai trường hợp như thế này).
    Sao em bỏ new đi thì kết quả vẫn giống có new vậy

 

 

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
  •