Từ khóa this được sử dụng để tham chiếu đến đối tượng lớp hiện tại. Nó chỉ ra phiên bản hiện tại của lớp, các phương thức hoặc hàm tạo. Nó cũng có thể được sử dụng để gọi các phương thức hoặc hàm tạo của lớp hiện tại. Nó giúp loại bỏ sự không chắc chắn giữa các thuộc tính của lớp và các tên tham số giống nhau. Nếu chúng ta khai báo các thuộc tính lớp giống như tên tham số, case đó sẽ tạo ra sự mơ hồ trong chương trình, khi đó từ khóa this có thể loại bỏ sự mơ hồ bằng cách thêm tiền tố vào các thuộc tính lớp. Nó có thể được truyền như một đối số trong phương thức lớp hoặc các hàm tạo.
Các bài viết liên quan:
Hãy hiểu ví dụ sau về cách hoạt động của từ khóa này.
Ví dụ – Không sử dụng từ khóa this
class Mobile { String mobileName = ""; int man_year = 0; // Tạo hàm tạo // ignore: non_constant_identifier_names Mobile(modelname, man_year) { mobileName = modelname; man_year = 2020; print( "Tên kiểu máy của điện thoại di động là: ${modelname} và năm sản xuất là: ${man_year}"); } } } void main () { Mobile mob = new Mobile ( "iPhone 11" , 2020 ); }
Giải trình
Trong chương trình trên, chúng ta đã tạo một lớp có tên là Mobile, có hai thuộc tính modelname và man_year. Sau đó, chúng tôi tạo một phương thức khởi tạo và truyền các tham số giống như tên thuộc tính lớp.
Trong phần thân hàm tạo, các biến lớp (thuộc tính) ở phía bên trái được gán bởi các tham số của hàm tạo có cùng tên. Khi chúng ta tạo thể hiện của một lớp, phương thức khởi tạo sẽ tự động được gọi là phương thức khởi tạo và in ra kết quả.
Trình biên dịch Dart có thể bị nhầm lẫn nếu có một số tham số trùng tên. Kết quả là trình biên dịch sẽ tạo ra sự mơ hồ. Đó là lý do tại sao chúng ta sử dụng từ khóa this để tham chiếu đến đối tượng lớp hiện tại.
Ví dụ – 2: Sử dụng từ khóa this
class Mobile { String mobileName = ""; int man_year = 0; // Tạo hàm tạo // ignore: non_constant_identifier_names Mobile(modelname, man_year) { this.mobileName = modelname; this.man_year = 2020; print( "Tên kiểu máy của điện thoại di động là: ${modelname} và năm sản xuất là: ${man_year}"); } } } void main () { Mobile mob = new Mobile ( "IPhone 11" , 2020 ); }
Giải trình:
Ví dụ trên giống với chương trình trước đó, nhưng điểm khác biệt duy nhất của từ khóa này.
- this .modelname = modelname;
- this .man_year = 2020 ;
Chúng tôi đã sử dụng từ khóa this cho biến phiên bản hoặc biến lớp khác với biến cục bộ.
Những điểm cần nhớ
- Từ khóa this được sử dụng để trỏ đối tượng lớp hiện tại.
- Nó có thể được sử dụng để tham chiếu đến các biến lớp hiện tại.
- Chúng ta có thể khởi tạo hoặc gọi hàm tạo lớp hiện tại bằng cách sử dụng từ khóa này.
- Chúng ta có thể chuyển từ khóa this như một tham số trong lời gọi hàm tạo.
- Chúng ta có thể chuyển từ khóa this như một tham số trong lời gọi phương thức.
- Nó loại bỏ sự mơ hồ hoặc xung đột đặt tên trong phương thức khởi tạo hoặc phương thức của cá thể / đối tượng của chúng ta.
- Nó có thể được sử dụng để trả về cá thể lớp hiện tại.
Local Variable
Các biến cục bộ được định nghĩa trong các phương thức, hàm tạo hoặc khối. Nó được tạo ra khi chúng ta tạo một phương thức hoặc phương thức khởi tạo và nó chỉ có phạm vi bên trong chúng. Chúng ta không thể sử dụng một biến cục bộ bên ngoài phương thức, hàm tạo hoặc khối.
Class Variable
Biến lớp còn được gọi là biến thành viên tĩnh , dùng để khai báo bằng từ khóa static. Nó được khai báo trong lớp, nhưng bên ngoài một hàm tạo, phương thức hoặc một khối. Tất cả các cá thể đều chia sẻ một bản sao của biến lớp hoặc chúng ta có thể nói rằng các biến lớp là chung cho tất cả các cá thể của lớp đó.
Instance Variable
Biến thể hiện còn được gọi là biến không tĩnh, được sử dụng để khai báo mà không có từ khóa static. Các biến cá thể là cụ thể của một đối tượng. Các biến này có thể được truy cập bằng thể hiện của lớp đó.
Sự khác biệt giữa Class Variable và Instance Variable
Sau đây là sự khác biệt giữa biến lớp và biến phiên bản
Sr. | Class Variable | Instance Variable |
1. | Biến lớp được khai báo bằng cách sử dụng từ khóa static trong một lớp, nhưng không được khai báo trong phương thức và hàm tạo. | Biến thể hiện được khai báo trong một lớp mà không sử dụng từ khóa static. |
2. | Biến lớp có thể được truy cập bằng cách sử dụng tên lớp. Cú pháp:ClassName.variableName | Biến thể hiện có thể được truy cập bằng cách sử dụng thể hiện của lớp đó. Cú pháp:ObjectRefernce.variableName |
3 | Các biến lớp là chung cho tất cả các case của lớp đó. Tất cả các thể hiện của lớp đều dùng chung một bản sao của biến tĩnh. | Các biến cá thể không phổ biến cho tất cả các phiên bản của lớp. Mỗi đối tượng cụ thể sẽ giữ nguyên bản sao của các biến thể hiện của chính nó. |
4 | Chúng được tạo ra khi chương trình được khởi động và hủy khi chương trình bị kết thúc. | Các biến cá thể được tạo khi một đối tượng của lớp cụ thể được tạo bằng từ khóa new () và hủy khi đối tượng bị hủy. |