Lập trình C++ / C# — August 26, 2016 at 11:34 am

Tìm hiểu về từ khóa base và new trong lập trình C#

by

Bạn đã biết được tính năng của từ khóa base và từ khóa new trong chương trình là gì chưa? Nếu bạn mới tìm hiểu về ngôn ngữ C# chắc còn xa lạ với 2 từ khóa này. Ở bài viết sau đây chúng tôi sẽ cho các bạn hiểu rõ về 2 từ khóa này nhé. Cùng theo dõi nào các bạn

Gọi phương thức khởi dựng (constructor) của lớp cha

Xem ví dụ dưới đây minh họa việc tạo và sử dụng các lớp cha và lớp con.

using System;
public class Window
{
    public Window(int top, int left)
    {
        this.top = top;
        this.left = left;
    }
    // mô phỏng vẽ cửa sổ
    public void DrawWindow()
    {
        Console.WriteLine("Drawing Window at {0}, {1}", top, left);
    }
    // Có hai biến thành viên private do đó hai
    // biến này sẽ không thấy bên trong lớp con
    private int top;
    private int left;
}
// ListBox dẫn xuất từ Window
public class ListBox : Window
{
    // Khởidựng có tham số
    public ListBox(int top, int left, string theContents)
        : base(top, left) // gọi khởi dựng của lớp cha
    {
        mListBoxContents = theContents;
    }
    public new void DrawWindow()
    {
        base.DrawWindow();
        Console.WriteLine("ListBox write: {0}", mListBoxContents);
    }
    // biến thành viên private
    private string mListBoxContents;
}
public class Tester
{
    public static void Main()
    {
        // tạo đối tượng cho lớp cha
        Window w = new Window(5, 10);
        w.DrawWindow();
        // tạo đối tượng cho lớp con
        ListBox lb = new ListBox(20, 10, "Hello world!");
        lb.DrawWindow();
        Console.ReadLine();
    }
}

Trong ví dụ trên, một lớp con tên là ListBox được thừa kế từ lớp cha Window, lớp ListBox constructor có ba tham số. Trong constructor của lớp con có gọi constructor của lớp cha. Cách gọi được thực hiện bằng việc đặt dấu hai chấm ngay sau phần khai báo danh sách tham số và tham chiếu đến lớp cha thông qua từ khóa base:.

public ListBox(
int theTop,
int theLeft,
string theContents):
base(theTop, theLeft) // gọi khởi tạo lớp cha

Bởi vì các lớp không được kế thừa các constructor của lớp cha, do đó lớp con phải cài đặt constructor riêng của nó, và chỉ có thể sử dụng constructor của lớp cha thông qua việc gọi tường minh.

Một điều lưu ý là trong trên, lớp ListBox cài đặt một phiên bản mới của phương thức DrawWindow():

public new void DrawWindow()

Từ khóa new được sử dụng ở đây để chỉ ra rằng người lập trình đang tạo ra một phiên bản mới cho phương thức này bên trong lớp con.

Nếu lớp cha có phương thức khởi dựng mặc định (default constructor), thì lớp con không cần bắt buộc phải gọi default constructor của lớp cha một cách tường minh. Thay vào đó default constructor của lớp cha sẽ được gọi một cách ngầm định. Tuy nhiên, nếu lớp cha không có default constructor, thì tất cả các lớp con của nó phải gọi constructor của lớp cha một cách tường minh thông qua việc sử dụng từ khóa base.

Gọi phương thức của lớp cha

public class Window
{
    // ...
    // mô phỏng vẽ cửa sổ
    public void DrawWindow()
    {
        Console.WriteLine("Drawing Window at {0}, {1}", top, left);
    }
    // ...
}
// ListBox dẫn xuất từ Window
public class ListBox : Window
{
    // ...
    public new void DrawWindow()
    {
        base.DrawWindow();
        Console.WriteLine("ListBox write: {0}", mListBoxContents);
    }
    // ...
}

rong ví dụ trên, phương thức DrawWindow() của lớp ListBox sẽ làm ẩn và thay thế phương thức DrawWindow() của lớp cha Window.

Khi chúng ta gọi phương thức DrawWindow() của một đối tượng của lớp ListBox thì phương thức ListBox.DrawWindow() sẽ được thực hiện, không phải phương thức Window.DrawWindow() của lớp cha Window.

Tuy nhiên, ta có thể gọi phương thức DrawWindow() của lớp cha thông qua từ khóa base:

base.DrawWindow(); // gọi phương thức lớp cha

Từ khóa base chỉ đến lớp cha cho đối tượng hiện hành.

Đến đây chắc các bạn đã biết được chức năng của từ khóa new và từ khóa base rồi chứ. Hy vọng bài viết này sẽ thật hữu ích dành cho bạn đọc. Cảm ơn đã theo dõi

Chúc các bạn học tốt!

Nguồn: code5s

 

Leave a Comment

Your email address will not be published. Required fields are marked *