Từ khóa this
Thuộc phần Lập trình hướng đối tượng trong hành trình C# của Coddy. Bài học 4 trên 70.
Từ khóa this dùng để chỉ instance hiện tại của một lớp. Từ khóa này được dùng để truy cập các thành viên của instance và phân biệt giữa tham số với trường có cùng tên.
Dùng this để phân biệt các trường với các tham số
public class Person
{
private string name;
private int age;
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
}Nếu không có this, tham số sẽ che khuất trường
// Đoạn code này sẽ không hoạt động như mong đợi
public Person(string name, int age)
{
name = name; // Gán tham số (parameter) cho chính nó!
age = age; // Gán tham số (parameter) cho chính nó!
}Dùng this với các thuộc tính
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
public Product(string name, decimal price)
{
this.Name = name;
this.Price = price;
}
public void DisplayInfo()
{
Console.WriteLine($"{this.Name}: ${this.Price}");
}
}Dùng this để gọi một hàm khởi tạo khác trong cùng lớp
public class Rectangle
{
public int Width { get; set; }
public int Height { get; set; }
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
// Hàm khởi tạo cho hình vuông
public Rectangle(int size) : this(size, size)
{
}
}Ví dụ sử dụng:
Rectangle rect = new Rectangle(5, 10);
Rectangle square = new Rectangle(5); // Tạo hình vuông 5x5Từ khóa this luôn chỉ đối tượng hiện tại. Từ khóa này đặc biệt hữu ích khi tên tham số trùng với tên trường hoặc thuộc tính, giúp code rõ ràng hơn và tránh lỗi.
Thử thách
Trung bìnhHoàn thiện lớp Product bằng cách thêm hàm khởi tạo, dùng từ khóa this để gán giá trị tham số cho các thuộc tính. Đồng thời triển khai phương thức GetDescription(), dùng this để truy cập các thuộc tính.
Phương thức GetDescription() cần trả về: "{Name} costs ${Price}"
Tự làm thử
using System;
class Program
{
static void Main()
{
string name = Console.ReadLine();
decimal price = decimal.Parse(Console.ReadLine());
Product product = new Product(name, price);
Console.WriteLine($"Product: {product.Name}");
Console.WriteLine($"Price: ${product.Price}");
Console.WriteLine(product.GetDescription());
}
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Các khái niệm cơ bản về lập trình hướng đối tượng
Tệp bên ngoàiKhông gian tên và chỉ thịGiới thiệu về lớp và đối tượngTừ khóa thisPhương thức và tham sốTrường và thuộc tínhHàm khởi tạoKhởi tạo đối tượngÔn tập: Máy tính đơn giản4Kế thừa
Cú pháp kế thừa cơ bản (:)Từ khóa 'base'Từ khóa virtual và overrideLớp sealedLớp cơ sở 'object'Ôn tập: hệ phân cấp nhân viên7Tính năng nâng cao
Nạp chồng toán tửBộ lập chỉ mục (this[])Ghi đè ToString()Phương thức mở rộngÔn tập: Danh sách tùy chỉnh10Các mẫu thiết kế phần 1
Giới thiệu về mẫu thiết kếSingleton an toàn với luồngMẫu FactoryMẫu Observer (sự kiện)Mẫu Strategy2Thuộc tính và thành viên tĩnh
Thuộc tính tự độngThuộc tính chỉ đọc hoặc chỉ ghiTrường và phương thức tĩnhLớp tĩnhThành viên có thân biểu thức5Đa hình và interface
Đa hình lúc biên dịch và lúc chạyInterface và lớp trừu tượngNhiều interfaceInterface tường minhUpcasting và downcastingÔn tập: bộ tính toán hình học8Các khái niệm OOP nâng cao
Ưu tiên composition hơn kế thừaGenerics (lớp và phương thức)Delegate và sự kiệnAttribute và reflectionGiao diện IDisposable và câu lệnh usingKiến thức cơ bản về dependency injection11Các mẫu thiết kế phần 2
Mẫu lệnhMẫu bộ chuyển đổiMẫu trang tríMẫu phương thức khuôn mẫuMẫu trạng tháiMẫu tổ hợpTự luyện tập: Trình biên dịch C# online