Truyền tham số cho phƣơng thức

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 32)

CHƢƠNG III: LỚP VÀ ĐỐI TƢỢNG 1 Đối tƣợng

3.3. Truyền tham số cho phƣơng thức

Khi định nghĩa phương thức của lớp thực hiện tính toán xử lý các dữ liệu đầu vào để đưa ra kết quả thì ta cần khai báo các tham số cho phương thức. Thông thường các tham số của phương thức mô tả dữ liệu đầu vào cho quá trình tính toán trong phương thức. Khi khai báo phương thức, nếu phương thức có tham số thì tham số được khai báo trong cặp dấu () sau tên phương thức với cú pháp

… <Tên phương thức> (<Kiểu dữ liệu> <Tên tham số>)

Ví dụ: khai báo một phương thức trả về bình phương một số

public int squareInt (int value)

Nếu có nhiều tham số thì các tham số được khai báo cách nhau dấu phẩy

… <Tên phương thức> (<Kiểu dữ liệu> <Tên tham số1>, <Kiểu dữ liệu> <Tên tham số2>…)

Ví dụ: khai báo một phương thức trả về tổng của hai số

public int sumInt(int value1, int value2)

Khi định nghĩa phương thức, các tham số được khai báo chỉ có ý nghĩa hình thức. Nghĩa là chỉ định rằng phương thức sẽ được sử dụng với định dạng như khi khai báo. Ví dụ phần khai bao phương thức squareInt ở trên chỉ ra rằng phương thức sẽ nhận một giá trị kiểu int làm đầu vào rồi tính toán ra bình phương của số đó và trả về làm kết quả của quá trình tính toán. Chỉ đến khi phương thức được gọi (call) thực thi thật sự thì tham số mới được truyền bằng giá trị hoặc bằng biến thật sự. Có hai cơ chế truyền tham số đó là: Truyền tham trị và truyền tham biến. Sau đây ta sẽ tìm hiểu chi tiết về hai cơ chế truyền tham số này.

Truyền tham trị

Khi truyền tham số bằng tham trị, trong lời gọi phương thức cho dù ta thay thế tham số của phương thức bằng giá trị hay biến hay đối tượng thì một giá trị được sao chép (tới một vùng bộ nhớ khác) từ tham số truyền vào được tạo ra trong quá trình thực thi phương thức. Trong khi thực thi phương thức, các câu lệnh trong thân phương thức chỉ làm việc với giá trị này. Khi phương thức được thực hiện xong thì giá trị sao chép này sẽ được hủy. Vậy có thể nói quá trình thực hiện của phương thức làm việc trên bản sao (vùng bộ nhớ bản sao) của tham số mà không ảnh hưởng gì tới tham số thật sự. Đây là cơ chế truyền tham số ngầm định của C#

Truyền tham biến

Khác với cơ chế truyền tham trị, khi truyền biến hay đối tượng làm tham số của phương thức thì các lệnh trong thân phương thức làm việc trực tiếp với biến hay đối tượng được truyền vào (làm việc với vùng bộ nhớ dành chó chính biến hay đối tượng được truyền vào). Vì vậy, khi các lệnh làm thay đổi giá trị của biến hay đối tượng đó thì sự thay đổi đó vẫn được lưu lại khi phương thức kết thúc. Để xác định tham số được truyền theo cơ chế này, khi khai báo tham số ta sử dụng từ khóa ref hoặc out.

Ví dụ (III.4) Truyền tham số bằng tham trị hay tham biến

Bước 1: Thêm một dự án console với tên Parameters vào solution Session_III

Bước 2: Thiết lập Parameters là dự án mặc định bằng cách click chuột phải vào project Parameters -> set as Startup project

Bước 3: Chèn mã lệnh vào lớp Program như sau class Program

{

static void Main(string[] args) {

int arg;

// Truyền tham trị.

arg = 4;

squareVal(arg);

Console.WriteLine(arg);//Hiển thị giá trị arg vẫn là 4

// Truyền tham biến

// Giá trị của biến arg bị thay đổi. arg = 4;

squareRef(ref arg);

Console.WriteLine(arg);//Hiển thị giá trị của art là 16

Console.ReadLine(); }

//Khai báo phương thức có tham số truyền tham trị (ngầm định) static void squareVal(int valParameter)

{

valParameter *= valParameter; }

// Khai báo phương thức có tham số truyền tham biến với từ khóa ref static void squareRef(ref int refParameter)

{

refParameter *= refParameter; }

}

Bước 4: Dịch và chạy chương trình

Hình (III.2) Màn hình hiển thị Ví dụ (III.4)

Trong Ví dụ (III.4) phương thức squareVal có tham số valParameter được khai báo truyền theo cơ chế tham trị (ngầm định). Trong phương thức Main() biến arg được truyền vào làm tham số cho phương thức squareVal qua lời gọi squareVal(arg); Khi đó, trong thân phương thức squareVal sẽ tạo ra một vùng bộ nhớ bản sao và sao chép giá trị của biến arg vào đó. Các lệnh trong thân phương thức squareVal chỉ tác động lên vùng bộ nhớ bản sao này mà không làm ảnh hưởng gì tới biến arg. Đó là lý do giá trị của biến arg vẫn không thay đổi và bằng 4

Còn trong phương thức squareRef tham số refParameter được khai báo với từ khóa ref

nghĩa là truyền tham biến. Trong phương thức Main() biến arg được truyền vào làm tham số cho phương thức squareRef qua lời gọi squareRef(ref arg); Khi đó, các lệnh trong thân phương thức squareRef sẽ làm việc trực tiếp với vùng bộ nhớ lưu trữ biến arg, đọc giá trị trong vùng bộ nhớ này, tính bình phương giá trị đó và ghi đè giá trị này lên giá trị cũ. Đó lày lý do giá trị của biến arg bị thay đổi thành bình phương của nó

Chúng ta có thể dùng out thay thế cho từ khóa ref với ý nghĩa gần như nhau nghĩa là tham số được truyền bằng tham biến, chỉ khác nếu dùng từ khóa ref thì biến được truyền vào làm tham số phải được gán giá trị khởi tạo trước khi truyền vào làm tham số cho phương thức. Từ khóa out thường được sử dụng khi ta muốn xây dựng các phương thức trả về nhiều hơn một giá trị

Một phần của tài liệu bài giảng lập trình hướng đối tượng c (Trang 32)