Truyền tham đối cho phương thức

Một phần của tài liệu Giáo trình lập trình windowns form với c net tập 1 TS lê trung hiếu, ths nguyễn thị minh thi (Trang 128 - 133)

C# cung cấp ba cỏch truyền tham đối cho phương thức: truyền bằng giỏ trị (value), truyền bằng tham chiếu (reference) và truyền kết quả (output).

Truyền bằng tham chiếu: truyền tham chiếu, khụng phải

truyền giỏ trị của tham đối thực sự cho tham đối hỡnh thức, mà sẽ thực hiện trờn chớnh đối tượng truyền vào, vỡ vậy thay đổi với tham đối hỡnh thức sẽ tỏc động đến tham đối thực sự,

nghĩa là tham đối thực sự sẽ chịu ảnh hưởng bởi sự thay đổi

của phương thức. Tham đối này gọi là tham biến. Tham đối cú kiểu tham chiếu sẽ được truyền tham chiếu vào

phương thức.

Truyền bằng giỏ trị: tạo bản sao của cỏc tham đối truyền vào

phương thức, nghĩa là sao chộp giỏ trị của tham đối thực sự cho tham đối hỡnh thức. Vỡ vậy thay đổi trờn tham đối hỡnh thức khụng tỏc động đến tham đối thực sự, nghĩa là tham đối

hỡnh thức khụng thay đổi trước và sau khi truyền cho phương

thức. Tham đối này gọi là tham trị. Tham đối cú kiểu giỏ trị

sẽ được truyền giỏ trị vào cho phương thức.

Vớ dụ:Truyền tham đối dưới dạng tham trị cho phương thức

using System; class Program {

{ num = 5; } } class Test {

static void Main(string[] args) {

int val = 2;

Program p = new Program(); p.Change(val);

Console.WriteLine("Gia tri cua val sau khi goi phuong thuc la {0}", val);

} }

Chỳ ý với kiểu string là kiểu tham chiếu nhưng truyền bởi giỏ

trị, bởi vỡ cỏc thao tỏc trờn string thật sự tạo ra một đối tượng mới,

chỳng ta thực hiện trờn bản sao để tham chiếu đến đối tượng mới, nhưng thật sự chuỗi gốc khụng thay đổi.

Vớ dụ: using System; class Program {

static void HoanVi(string s1, string s2) {

string temp = s1; s1 = s2;

s2 = temp;

Console.WriteLine("Trong phương thuc: {0} {1}", s1, s2);

}

static void Main(string[] args) {

string str1 = "Hello"; string str2 = "World";

HoanVi(str1, str2);

Console.WriteLine("Sau khi hoan vi: {0} {1}", str1, str2); }

}

Sử dụng từ khúa refđể truyền tham chiếu: C# cũn cung cấp khả

năng cho phộp ta truyền cỏc tham đối cú kiểu giỏ trị dưới hỡnh thức là tham chiếu, bằng cỏch bổ sung từ khúa ref.

Vớ dụ:Truyền tham đối dưới dạng tham chiếu cho phương thức.

using System; class Program {

public void Change(ref int num) { num = 5; } } class Test {

static void Main(string[] args) {

int val = 2;

Program p = new Program(); p.Change(ref val);

Console.WriteLine("Gia tri cua val sau khi goi phuong thuc la {0}", val);

} }

Để kiểu tham chiếu string cú thể truyền bằng tham chiếu, sử

dụng từ khúa ref như sau:

Vớ dụ: using System; class Program {

{

string temp = s1; s1 = s2;

s2 = temp;

Console.WriteLine("Trong phương thuc: {0} {1}", s1, s2);

}

static void Main(string[] args) {

string str1 = "Hello"; string str2 = "World";

Console.WriteLine("Truoc khi hoan vi: {0} {1}", str1, str2); HoanVi(ref str1, ref str2);

Console.WriteLine("Sau khi hoan vi: {0} {1}", str1, str2); }

}

Cú thể sử dụng lớp StringBuilder trong namespace System.Text để truyền tham chiếu như sau:

Vớ dụ: using System; using System.Text; class Program {

static void HoanVi(StringBuilder s1, StringBuilder s2) {

StringBuilder temp = new StringBuilder(); temp.Append(s1);

s1.Remove(0, s1.Length); s1.Append(s2);

s2.Remove(0, s2.Length); s2.Append(temp);

Console.WriteLine("Trong phương thuc: {0} {1}", s1, s2); }

static void Main(string[] args) {

StringBuilder str2 = new StringBuilder("World");

Console.WriteLine("Truoc khi hoan vi: {0} {1}", str1, str2); HoanVi(str1, str2);

Console.WriteLine("Sau khi hoan vi: {0} {1}", str1, str2); }

}

Sử dụng từ khúa out để truyền tham chiếu kết quả (output): Ngụn ngữ C# bắt buộc phải thực hiện một phộp gỏn cho biến trước

khi sử dụng, do đú khi khai bỏo một biến cục bộ thỡ trước khi sử dụng

cỏc biến này, phải gỏn giỏ trị cho biến. Vỡ vậy, nếu bạn muốn truyền tham đối kiểu giỏ trị dưới dạng tham chiếu khi gọi phương thức, nhưng khụng cần phải khởi tạo giỏ trị cho tham đối, mà chỉ muốn

nhận giỏ trị của tham đối, phải sử dụng từ khúa out.

Vớ dụ:Truyền tham đối dưới dạng kết quả cho phương thức

using System;

namespace TruyenThamDoi {

class Program {

public static void Sum(int num1, int num2, out int result) {

result = num1 + num2; }

}

class Test {

static void Main(string[] args) {

int val1 = 2, val2 = 5; int output;

Program.Sum(val1, val2, out output); Console.WriteLine("Tong la {0}", output); }

} }

Một phần của tài liệu Giáo trình lập trình windowns form với c net tập 1 TS lê trung hiếu, ths nguyễn thị minh thi (Trang 128 - 133)