Giáo trình hướng dẫn xây dựng một trình tự xử lý các toán tử trong phép toán đại số có độ ưu tiên p8 - Pdf 19

Ngôn Ngữ Lập Trình C#
gán các giá trị mới cho các tham số tham chiếu này, kết quả là sau khi phương thức thực hiện
xong ta dùng các tham số truyền vào như là các kết quả trả về. Ví dụ 4.7 sau minh họa việc
truyền tham số tham chiếu cho phương thức.
 Ví dụ 4.7: Trả giá trị trả về 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;

Current time: 0:0:0

Như ta thấy, kết quả xuất ra ở dòng cuối cùng là ba giá trị 0:0:0, rõ ràng phương thức
GetTime() không thực hiện như mong muốn là gán giá trị Hour, Minute, Second cho các
tham số truyền vào. Tức là ba tham số này được truyền vào dưới dạng giá trị. Do đó để thực
hiện như mục đích của chúng ta là lấy các giá trị của Hour, Minute, Second thì phương thức
GetTime() có ba tham số được truyền dưới dạng tham chiếu. Ta thực hiện như sau, đầu tiên,
thêm là thêm khai báo ref vào trước các tham số trong 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 là bổ sung cách gọi hàm GetTime để truyền các tham số dưới dạng tham
chiếu như sau:
t.GetTime( ref theHour, ref theMinute, ref theSecond);
Nếu chúng ta không thực hiện bước thứ hai, tức là không đưa từ khóa ref khi gọi hàm thì
trình biên dịch C# sẽ báo một lỗi rằng không thể chuyển tham số từ kiểu int sang kiểu ref int.
Xây Dựng Lớp - Đối Tượng
109
Ngôn Ngữ Lập Trình C#
Cuối cùng khi biên dịch lại chương trình ta được kết quả đúng như yêu cầu. Bằng việc khai
báo tham số tham chiếu, trình biên dịch sẽ truyền các tham số dưới dạng các tham chiếu, thay
cho việc tạo ra một bản sao chép các tham số này. Khi đó các tham số bên trong GetTime() sẽ
tham chiếu đến cùng biến đã được khai báo trong hàm Main(). Như vậy mọi sự thay đổi với
các biến này điều có hiệu lực tương tự như là thay đổi trong hàm Main().
Tóm lại cơ chế truyền tham số dạng tham chiếu sẽ thực hiện trên chính đối tượng được đưa
vào. Còn cơ chế truyền tham số giá trị thì sẽ tạo ra các bản sao các đối tượng được truyền vào,
do đó mọi thay đổi bên trong phương thức không làm ảnh hưởng đến các đối tượng được

110
Ngôn Ngữ Lập Trình C#
m = Minute;
s = Second;
}
và cách gọi mới phương thức GetTime() trong Main():
t.GetTime( out theHour, out theMinute, out theSecond);
Tóm lại ta có các cách khai báo các tham số trong một phương thức như sau: kiểu dữ liệu giá
trị được truyền vào phương thức bằng giá trị. Sử dụng tham chiếu ref để truyền kiểu dữ liệu
giá trị vào phương thức dưới dạng tham chiếu, cách này cho phép vừa sử dụng và có khả năng
thay đổi các tham số bên trong phương thức được gọi. Tham chiếu out được sử dụng chỉ để
trả về giá trị từ một phương thức. Ví dụ 4.8 sau sử dụng ba kiểu tham số trên.
 Ví dụ 4.8: 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;
}
public void SetTime(int hr, out int min, ref int sec)
{
// Nếu số giây truyền vào >30 thì tăng số Minute và Second = 0
if ( sec >=30 )

{
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;
t.SetTime( theHour, out theMinute, ref theSecond);
Console.WriteLine(“The Minute is now: {0} and {1} seconds”,
theMinute, theSecond);
}
}

 Kết quả:
8/6/2002 15:35:24
Xây Dựng Lớp - Đối Tượng
112


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status