Từ 1 tới 7 trên tổng số 7 kết quả

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

  1. #1
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Wink 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:
    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 ).
    Những nhận xét đó đúng và sai ở đâu? Vui lòng chỉ giúp và bổ xung hộ.
    Thanks!
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  2. #2
    Ngày gia nhập
    10 2006
    Bài viết
    107

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

    1. Nếu xài override :
    PHP Code:
    // 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 :
    PHP Code:
    // 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
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Dù sao cũng cảm ơn solokop .
    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.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  4. #4
    Ngày gia nhập
    10 2006
    Bài viết
    107

    @ 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
    Nói là một chuyện, làm là một chuyện. Chi bằng ta làm xong rồi hãy nói như vậy thì nói và làm sẽ là một chuyện.

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    Sơn La
    Bài viết
    133

    Trích dẫn Nguyên bản được gửi bởi Solokop Xem bài viết
    @ 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ì.
    Vậy mọi người code hộ mình đoạn nó không cho phép nhé.
    Thanks.
    Trao đổi kiến thức sẽ giúp ta tiếp cận nhanh với kiến thức.

  6. #6
    Ngày gia nhập
    11 2007
    Nơi ở
    Biết để làm gì?
    Bài viết
    827

    Mặc định Sự khác biệt giữa new, virtual và override ?

    Trích dẫn Nguyên bản được gửi bởi NT_OnlyLove Xem bài viết
    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 đó )
    Cánh Chym ứ mỏi

  7. #7
    Ngày gia nhập
    02 2009
    Bài viết
    13

    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

Các đề tài tương tự

  1. C++ Tutorial Virtual table trong việc dynamic binding phương thức virtual
    Gửi bởi luc13aka47 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 19-04-2016, 08:56 PM
  2. New, Virtual va Override có tác dụng gì trong lập trình C#?
    Gửi bởi yuchi_1k91 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 11-04-2016, 02:26 PM
  3. Từ khóa virtual-override
    Gửi bởi protieusoi trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 15-10-2013, 10:10 PM
  4. Bài tập C++ Inheritance - virtual/pure virtual
    Gửi bởi jonathan_nguyen trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 09-02-2013, 10:53 AM
  5. Thắc mắc về virtual override trong C#, giúp mình
    Gửi bởi qhai_2009 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 30-10-2010, 11:18 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn