Lớp và Phương thức trong C# 5.0 - Phần 2 - Bài 6 - Visual Studio 2015

Lớp và Phương thức trong C# 5.0 - Phần 2 - Bài 6 - Visual Studio 2015
access_time 11/14/2015 4:20:16 PM
person Nguyễn Mạnh Hùng
1.Phạm vi truy cập.
1.1 Giới thiệu
Phạm vi chỉ ra phần chương trình trong đó có thể truy xuất đến một đối tượng nào đó. Để kiểm soát truy nhập đến các thành phần (biến, thuộc tính và phương thức) của các lớp, C# đưa ra khái niệm phạm vi lớp. Tất cả các thành phần của một lớp sẽ được coi là thuộc phạm vi lớp; Trong định nghĩa phương thức thành phần của lớp có thể tham chiếu đến bất kỳ thành phần nào của lớp đó. Tuân theo ý tưởng đóng gói, C# coi tất cả các thành phần của một lớp có thể liên hệ với nhau.
1.2 Từ khóa xác đinh phạm vi truy xuất
Trong định nghĩa lớp, có thể xác định khả năng truy xuất thành phần của lớp nào đó từ bên ngoài  phạm vi lớp. Để xác định khả năng truy xuất này C# cung cấp các từ khóa public, private, protected, internal:
  • public:  Mọi thành phần liệt kê trong từ khóa public đều có thể truy xuất trong bất kỳ phương thức nào.
  • private: Những thành phần liệt kê trong phần private chỉ được truy xuất trong phạm vi lớp, bởi vì chúng thuộc sở hưu riêng của lớp.
  • protected : Những thành phàn liệt kê trong phần protected được phép truy xuất trong phạm vi nội tại của lớp chứa nó và lớp thừa kế. Điều đó có nghĩa là protected là sự kết hợp giữa public và private.
  • Internal : Các thành phần được khai báo trong phạm vi của từ khóa internal sẽ được phép truy xuất tại các lớp cùng nằm trong file assembly; Trong C# assembly chính là các file dll và .exe, các file này được MSIL biên dịch ra. 
Ví dụ
Xây dựng chương trình TamGiac với 3 cạnh có độ dài kiểu float, các phương thức nhập dữ liệu 3 cạnh, in thông tin tam giac, ví dụ này minh họa các sử dụng từ khóa private, public.
Hình số 1 : Minh họa về cách sử dụng public và private
2. Khả năng của các phương thức.
2.1 Tham số của phương thức
Tham số được sử dụng để đóng vai trò làm đầu vào cho một phương thức (Tham số đóng vai trò là các đối số của hàm) hoặc có thể lưu thông tin đầu ra của phương thức. Khi định nghĩa phương thức cần phải định nghĩa danh sách các tham số tương ứng cho phương thức đó.
2.1.1 Khai báo tham số.
Mỗi tham số sẽ được xác định thông qua tên và kiểu dữ liệu của tham số đó. Tham số được khai báo bên trong dấu () sau tên của phương thức, mỗi phương thức không giới hạn số lượng các tham số truyền vào, mỗi tham số được phân cách bởi dấu phảy   :
Cú pháp:
<access_modifier> <return_type> <MethodName> ([list of parameters])
{
// body of the method
}
Mô tả :
  • Xem lại mụi 3.1 (Tạo phương thức của bài số 1).
2.1.2 Các loại tham số.
Có 3 loại tham số thông dụng khác nhau: Tham số đóng vai trò là tham trị (value paramater), tham số đóng vai trò là tham chiếu (reference paramater) và tham số đóng vai trò là đầu ra (output paramater) của phương thức.
Value parameter : Tham số đóng vai trò là tham trị, còn gọi là tham số đầu vào đóng vai trò truyền giá trị đầu vào cho phương thức. Bản chất tham trị nhận một sao chép giá trị của đối số được truyền tới nó. Kết quả là nếu phương thức có bất kỳ thay đổi nào đến tham số thì cũng không tới tham số đầu vào.
Ví dụ tham trị:

Hình số 2 : Minh họa về cách sử dụng tham trị
reference parameter: Tham số tham chiếu còn gọi là tham số vào/ra, bản chất của tham số này nhận các đối số được truyền tới nó và làm trực tiếp trên đối số đó, bất kỳ một thay đổi nào được tạo ra bởi phương thức tới tham số tham chiếu đều tác động trực tiếp lên đối số. Khi lập trình các lập trình viên thường gọi là cơ chế truyền bằng tham chiếu khi thực hiện phương thức. Các tham số này đi kèm với từ khóa ref.
Cú pháp
<access_modifier> <return_type> <MethodName> (ref parameter1, ref parameter2,
parameter3, parameter4, ... parameterN)
{
// actions to be performed
}
Mô tả
  • parameter 1...parameterN: Tên các tham số truyền vào của hàm. Lưu ý trong các tham số này có thể có tham số không có ref (tham số đóng vai trò tham trị)
Ví dụ

Hình số 3 : Minh họa về cách sử dụng từ khóa ref
output parameter : Tham số truyền vào của phương thức nhưng đóng vai trò làm đầu ra (Lưu kết quả đầu ra của phương thức. Cách sử dụng tương tự như cơ chế sử dụng tham chiếu, tuy nhiên thay vì từ khóa ref thì chúng ta sử dụng từ khóa out ngoài ra với các tham số ref thì bắt buộc phải khởi tạo giá trị trước khi truyền còn với out thì không cần.
Cú pháp
<access_modifier> <return_type> <MethodName> (out parameter1, out parameter2,
... parameterN)
{
// actions to be performed
}
Mô tả
  • parameter 1...parameterN: Tên các tham số truyền vào của hàm. Lưu ý trong các tham số này có thể có tham số không có out (tham số đóng vai trò tham trị hoặc tham chiếu).
Ví dụ

Hình số 4 : Minh họa về cách sử dụng từ khóa out
2.2 Phương thức nạp chồng.
Các phương thức trực thuộc lớp có thể trùng tên nhau nhưng phải khác nhau ở kiểu giá trị trả về, danh sách kiểu các tham số, cách xây dựng các phương thức như vậy người ta gọi là  phương thức nạp chồng :
Ví dụ :

Hình số 5 : Ví dụ về Phương thức nạp chồng
Khi thực hiện nạp chồng một phương thức, bắt buộc chúng ta phải thay đổi ký hiệu của phương thức, số tham số, hay kiểu dữ liệu của tham số. Chúng ta cũng có thể toàn quyền thay đổi giá trị trả về, nhưng đây là tùy chọn. Nếu chỉ thay đổi giá trị trả về thì không phải nạp chồng phương thức mà khi đó hai phương thức khác nhau, và nếu tạo ra hai phương thức cùng ký hiệu nhưng khác nhau kiểu giá trị trả về sẽ tạo ra một lỗi biên dịch.
2.3 . Từ khóa this
Từ khóa this trong định nghĩa của các phương thức thành phần của lớp dòng để trỏ đến đối tượng hiện tại là thể hiện của lớp đó hay nói cách khác this tham chiếu đến đối tượng đang gọi phương thức thành phần. Như vậy có thể truy nhập đến các thành phần của đối tượng gọi phương thức thành phần gián tiếp thông qua this.
Ví dụ

Hình số 6 : Minh họa sử dụng this
3 Phương thức khởi tạo và Phương thức hủy
3.1 Phương thức khởi tạo
Phương thức khởi tạo là phương thức đặc biệt. Phương thức này sẽ được gọi khi chúng ta tạo đối tượng là thể hiện của lớp. Chức năng của phương thức khởi tạo là khởi tạo các giá trị của thành phần dữ liệu (bao gồm có biến thành phần và thuộc tính) của đối tượng.
Phương thức khởi tạo được định nghĩa khi xây dựng lớp, nếu ta không tạo ra thì CLR sẽ thay mặt chúng ta mà tạo phương thức khởi tạo một cách mặc định.
Chức năng của bộ khởi tạo là tạo ra đối tượng được xác định bởi một lớp và đặt trạng thái này hợp lệ. Trước khi bộ khởi tạo được thực hiện thì đối tượng chưa được cấp phát trong bộ nhớ. Sau khi bộ khởi tạo thực hiện hoàn thành thì bộ nhớ sẽ lưu giữ một thể hiện hợp lệ của lớp vừa khai báo.
Phương thức khởi tạo được khai báo giống như phương thức bình thường của lớp tuy nhiên nó có đặc điểm :
  • Không có giá trị trả về.
  • Tên phương thức khởi tạo trùng với tên của lớp
Để tạo phương thức khởi tạo, lập trình viên cần tuân thủ cú pháp sau :
Cú pháp
<access_modifier> <ClassName> ([list of parameters])
{
// body of the method
}
Mô tả
  • access_modifier: Xác định phạm vi truy cập của phương thức khởi tạo(public, protected, private và internal), nếu không cho phép thì không được phép truy cập, mặc định các phương thức sẽ là private.
  • ClassName: Tên phương thức trùng với tên của lớp.
  • list of parameters: Danh sách các tham số truyền vào của phương thức.
Ví dụ

Hình số 7 : Phương thức khởi tạo
Trong ví dụ trên lớp Point có 2 phương thức khởi tạo Point() và Point(int ox, int oy), vậy các phương thức khởi tạo cho phép nạp chồng phương thức.
3.2 Phương thức khởi tạo ngầm định
Phương thức thiết lập do chương trình dịch cung cấp khi trong khai báo lớp không có định nghĩa phương thức thiết lập nào.
Ví dụ

Hình số 8 : Phương thức khởi tạo mặc định
3.3 Phương thức hủy
Ngược lại với phương thức khởi tạo, phương thức hủy được gọi khi đối tượng tương ứng bị xóa khỏi bộ nhớ. Phương thức hủy cũng có cùng tên với tên lớp tuy nhiên phía trước có dấu “~”.
Đặc điểm của phương thức hủy như sau :
  • Phương thức hủy không cho phép kế thừa và không cho phép nạp chồng
  • Phương thức hủy không được gọi tường minh
  • Phương thức hủy không có phạm vi truy cập và không có tham số truyền vào
Cú pháp
~<ClassName> ()
{
// body of the method
}
Mô tả
  • ClassName : Tên phương thức hủy cùng với tên của lớp
Khi làm việc với các đoạn mã không được quản lý thì cần phải khai báo tường minh các phương thức hủy để giải phóng các tài nguyên. C# cung cấp ngần định một phương thức để thực hiện điều khiển công việc này, phương thức đó là Finalize() hay còn gọi là bộ kết thúc. Phương thức Finalize này sẽ được gọi bởi cơ chế thu dọn khi đối tượng bị hủy và phương thức này được gọi trong nội dung thực hiện của phương thức hủy.
hiện.
Nếu chúng ta xử lý các tài nguyên không kiểm soát như xử lý các handle của tập tin và ta muốn được đóng hay giải phóng nhanh chóng bất cứ lúc nào, ta có thực thi Interface IDisposable và hàm Disposable trong Interface này. Các bạn có thể tham khảo thêm trong tài liệu msdn của Microsoft.
vertical_align_top
share
Chat...