C# - C Sharp: Từ khóa this

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

C# cung cấp từ khóa this cho phép ta có thể sử dụng trong phương thức hoặc hàm tạo để tham chiếu tới đối tượng hiện thời, đó là đối tượng gọi tới phương thức hay hàm tạo đó. Bất kỳ một thành phần nào của đối tượng hiện thời đều có thể được tham chiếu từ bên trong một phương thức hoặc một hàm tạo bằng cách sử dụng từ khóa 'this'.

Từ khóa this được sử dụng một cách ngầm định trong khi tham chiếu tới các biến và phương thức của lớp.

Ví dụ, xét phương thức CalcArea() trong đoạn mã dưới đây:

public class Circle {
  float area; //biến lưu trữ diện tích hình tròn

  public float GetPI() {
    return 3.14f;
  }

  public void CalcArea(int rad) {
    area = getPI() * rad * rad;
  }
}

Phương thức CalcArea() tính diện tích của hình tròn và lưu vào biến area. Nó truy xuất giá trị của PI bằng cách gọi phương thức GetPI(). Ở đây, phương thức gọi không liên quan đến bất kỳ đối tượng nào mặc dù GetPI() là một phương thức thể hiện. Đó là bởi vì từ khóa 'this' được sử dụng ngầm định.

Phương thức CalcArea() cũng có thể được viết tường minh bằng cách sử dụng từ khóa this như sau:

public class Circle {
  float area; //biến lưu trữ diện tích hình tròn

  public float GetPI() {
    return 3.14f;
  }

  public void CalcArea(int rad) {
    //từ khóa this đã được sử dụng ở đây
    this.area = this.getPI() * rad * rad;
  }
}

Lưu ý rằng ta sử dụng this để chỉ ra đối tượng hiện thời, là đối tượng gọi tới phương thức CalArea().

Từ khóa 'this' còn có thể được sử dụng để gọi tới hàm tạo từ bên trong một hàm tạo khác.

Điều này còn được gọi là lời gọi hàm tạo tường minh như đoạn mã dưới đây:

public class Circle {
  private float rad; //bán kính
  private float PI; //số PI
  public Circle(){
    PI = 3.14f;
  }
  public Circle(float r) {
    this(); //gọi tới hàm tạo không tham số Circle()
    rad = r;
  }
}

Từ khóa 'this' có thể được sử dụng để giải quyết vấn đề xung đột tên khi tên của tham số giống với tên của trường như đoạn mã sau:

public class Circle {
  private float rad; // dòng 1
  private float PI;
  public Circle() {
    PI = 3.14f;
  }
  public Circle(float rad) { // dòng 2
    this();
    this.rad = rad; // dòng 3
  }
}

Đoạn mã trên định nghĩa hàm tạo Circle với một tham số có tên là rad ở dòng 2. Như vậy thì tham số này có tên trùng với tên trương được khai báo ở dòng 1, mà giá trị sẽ được gán khi thực thi chương trình. Bây giờ, khi gán một giá trị cho biến rad của hàm tạo, thì người dùng sẽ phải viết là rad = rad. Tuy nhiên, trình dịch sẽ hiểu là hai biến rad này thực tế là một. Để giải quyết vấn đề này thì ta cần viết lại là this.rad = rad.

» Tiếp: Từ khóa static
« Trước: Hàm tạo (Constructor)
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!