Truyền tham số

7 236 0
Truyền tham số

Đang tải... (xem toàn văn)

Thông tin tài liệu

Truyền tham số Truyền tham số Bởi: Khuyet Danh Ngôn ngữ C# đưa bổ sung tham số ref cho phép truyền đối tượng giá trị vào phương thức theo kiểu tham chiếu Và tham số bổ sung out trường hợp muốn truyền dạng tham chiếu mà không cần phải khởi tạo giá trị ban đầu cho tham số truyền Ngoài ngôn ngữ C# hỗ trợ bổ sung params cho phép phương thức chấp nhận nhiều số lượng tham số Truyền tham chiếu Những phương thức trả giá trị, giá trị tập hợp giá trị Nếu muốn phương thức trả nhiều giá trị cách thực tạo tham số hình thức tham chiếu Khi phương thức ta xử lý gán giá trị cho tham số tham chiếu này, kết sau phương thức thực xong ta dùng tham số truyền vào kết trả Ví dụ 4.7 sau minh họa việc truyền tham số tham chiếu cho phương thức Trả giá trị trả thông qua tham số using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine("{0}/{1}/{2}/ {3}:{4}:{5}", Date, Month, Year, Hour, Minute, Second); } public int GetHour() { return Hour; } public void GetTime(int h, int m, int s) { h = Hour; m = Minute; s = Second; } public Time( System.DateTime dt) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; } public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; Time t = new Time( currentTime); t.DisplayCurrentTime(); int theHour = 0; int theMinute = 0; int theSecond = 0; t.GetTime( theHour, theMinute, 1/7 Truyền tham số theSecond); System.Console.WriteLine("Current {0}:{1}:{2}",theHour, theMinute, theSecond); } } time: Kết quả: 8/6/2002 14:15:20 Current time: 0:0:0 Như ta thấy, kết xuất dòng cuối ba giá trị 0:0:0, rõ ràng phương thức GetTime() không thực mong muốn gán giá trị Hour, Minute, Second cho tham số truyền vào Tức ba tham số truyền vào dạng giá trị Do để thực mục đích lấy giá trị Hour, Minute, Second phương thức GetTime() có ba tham số truyền dạng tham chiếu Ta thực sau, đầu tiên, thêm thêm khai báo ref vào trước tham số phương thức GetTime(): public void GetTime( ref int h, ref int m, ref int s) { h = Hour; m = Minute; s = Second; } Điều thay đổi thứ hai bổ sung cách gọi hàm GetTime để truyền tham số dạng tham chiếu sau: t.GetTime( ref theHour, ref theMinute, ref theSecond); Nếu không thực bước thứ hai, tức không đưa từ khóa ref gọi hàm trình biên dịch C# báo lỗi chuyển tham số từ kiểu int sang kiểu ref int Cuối biên dịch lại chương trình ta kết yêu cầu Bằng việc khai báo tham số tham chiếu, trình biên dịch truyền tham số dạng tham chiếu, thay cho việc tạo chép tham số Khi tham số bên GetTime() tham chiếu đến biến khai báo hàm Main() Như thay đổi với biến điều có hiệu lực tương tự thay đổi hàm Main() Tóm lại chế truyền tham số dạng tham chiếu thực đối tượng đưa vào Còn chế truyền tham số giá trị tạo đối tượng truyền vào,do thay đổi bên phương thức không làm ảnh hưởng đến đối tượng truyền vào dạng giá trị 2/7 Truyền tham số Truyền tham chiếu với biến chưa khởi tạo Ngôn ngữ C# bắt buộc phải thực phép gán cho biến trước sử dụng, khai báo biến kiểu trước có lệnh sử dụng biến phải có lệnh thực việc gán giá trị xác định cho biến Như ví dụ 4.7 trên, không khởi tạo biến theHour, theMinute, biến theSecond trước truyền tham số vào phương thức GetTime() trình biên dịch báo lỗi Nếu sửa lại đoạn mã ví dụ trước sau: int theHour; int theMinute; int theSecond; t.GetTime( ref int theHour, ref int theMinute, ref int theSecond); Việc sử dụng đoạn lệnh hoàn toàn vô lý mục đích nhận giá trị đối tượng Time, việc khởi tạo giá trị biến đưa vào không cần thiết Tuy nhiên biên dịch với đoạn mã lệnh báo lỗi sau: Use of unassigned local variable ‘theHour’ Use of unassigned local variable ‘theMinute’ Use of unassigned local variable ‘theSecond’ Để mở rộng cho yêu cầu trường hợp ngôn ngữ C# cung cấp thêm bổ sung tham chiếu out Khi sử dụng tham chiếu out yêu cầu bắt buộc phải khởi tạo tham số tham chiếu bỏ qua Như tham số phương thức GetTime(), tham số không cung cấp thông tin cho phương thức mà đơn giản chế nhận thông tin đưa bên Do ta đánh dấu tất tham số tham chiếu out, ta giảm công việc phải khởi tạo biến trước đưa vào phương thức Lưu ý bên phương thức có tham số tham chiếu out tham số phải gán giá trị trước trả Ta có số thay đổi cho phương thức GetTime() sau: public void GetTime( out int h, out int m, out int s) { h = Hour; 3/7 Truyền tham số m = Minute; s = Second; } cách gọi phương thức GetTime() Main(): t.GetTime( out theHour, out theMinute, out theSecond); Tóm lại ta có cách khai báo tham số phương thức sau: kiểu liệu giá trị truyền vào phương thức giá trị Sử dụng tham chiếu ref để truyền kiểu liệu giá trị vào phương thức dạng tham chiếu, cách cho phép vừa sử dụng có khả thay đổi tham số bên phương thức gọi Tham chiếu out sử dụng để trả giá trị từ phương thức Ví dụ sau sử dụng ba kiểu tham số Sử dụng tham số using System; public class Time { public void DisplayCurrentTime() { Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}", Date, Month, Year, Hour, Minute, Second); } public int GetHour() { return Hour; } 4/7 Truyền tham số public void SetTime(int hr, out int min, ref int sec) { // Nếu số giây truyền vào >30 tăng số Minute Second = if ( sec >=30 ) { Minute++; Second = 0; } Hour = hr; // thiết lập giá trị hr truyền vào // Trả giá trị cho sec = Minute; sec = Second; } public Time(System.DateTime dt) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } 5/7 Truyền tham số // biến thành viên private private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; } public class Tester { static void Main() { System.DateTime currentTime = System.DateTime.Now; Time t = new Time(currentTime); t.DisplayCurrentTime(); int theHour = 3; int theMinute; int theSecond = 20; t.SetTime( theHour, out theMinute, ref theSecond); Console.WriteLine("The Minute is now: {0} and {1} seconds ",theMinute, theSecond); theSecond = 45; 6/7 Truyền tham số t.SetTime( theHour, out theMinute, ref theSecond); Console.WriteLine("The Minute seconds",theMinute, theSecond); is now: {0} and {1} } } -Kết 8/6/2002 15:35:24 The Minute is now: 35 and 24 seconds The Minute is now: 36 and seconds Phương thức SetTime minh họa việc sử dụng ba kiểu truyền tham số vào phương thức Tham số thứ theHour truyền vào dạng giá trị, mục đích tham số để thiết lập giá trị cho biến thành viên Hour tham số không sử dụng để giá trị Tham số thứ hai theMinute truyền vào phương thức để nhận giá trị trả biến thành viên Minute, tham số khai báo với từ khóa out Cuối tham số theSecond truyền vào với khai báo ref, biến tham số vừa dùng để thiết lập giá trị phương thức Nếu theSecond lớn 30 giá trị biến thành viên Minute tăng thêm đơn vị biến thành viên Second thiết lập Sau theSecond gán giá trị biến thành viên Second trả Do hai biến theHour theSecond sử dụng phương thức SetTime nên phải khởi tạo trước truyền vào phương thức Còn với biến theMinute không cần thiết không sử dụng phương thức mà nhận giá trị trả 7/7 ... ta kết yêu cầu Bằng việc khai báo tham số tham chiếu, trình biên dịch truyền tham số dạng tham chiếu, thay cho việc tạo chép tham số Khi tham số bên GetTime() tham chiếu đến biến khai báo hàm... ba kiểu truyền tham số vào phương thức Tham số thứ theHour truyền vào dạng giá trị, mục đích tham số để thiết lập giá trị cho biến thành viên Hour tham số không sử dụng để giá trị Tham số thứ... Minute, Second cho tham số truyền vào Tức ba tham số truyền vào dạng giá trị Do để thực mục đích lấy giá trị Hour, Minute, Second phương thức GetTime() có ba tham số truyền dạng tham chiếu Ta thực

Ngày đăng: 31/12/2015, 21:48

Từ khóa liên quan

Mục lục

  • Truyền tham số

  • Truyền tham chiếu

  • Truyền tham chiếu với biến chưa khởi tạo

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan