Danh mục

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

Số trang: 5      Loại file: pdf      Dung lượng: 866.95 KB      Lượt xem: 7      Lượt tải: 0    
10.10.2023

Phí lưu trữ: miễn phí Tải xuống file đầy đủ (5 trang) 0
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Tham số thứ hai là theMinute được truyền vào phương thức chỉ để nhận giá trị trả về của biến thành viên Minute, do đó tham số này được khai báo với từ khóa out.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ố. ...
Nội dung trích xuất từ tài liệu:
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 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ệnxong 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ệctruyề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; Second = dt.Second; } private int Year; private int Month; private int Date; private int Hour; private int Minute; private int Second; 108 Xây Dựng Lớp - Đối Tượng Ngôn Ngữ Lập Trình C#}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, theSecond); System.Console.WriteLine(“Current time: {0}:{1}:{2}”, theHour, theMinute, theSecond); }}----------------------------------------------------------------------------- Kết quả:8/6/2002 14:15:20Current 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ứcGetTime() không thực hiện như mong muốn là gán giá trị Hour, Minute, Second cho cáctham 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ựchiệ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ứcGetTime() 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 thamchiế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. 109 Xây Dựng Lớp - Đối Tượng 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 khaibá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, thaycho 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ớicá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 đưavà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 đượctruyền vào dưới dạng giá trị.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 hiện một phép gán cho biến trước khi sử dụng, do đó khikhai báo một biến như kiểu cơ bản thì trước khi có lệnh nào sử dụng các biến này thì phải cólệnh thực hiện việc gán giá trị xác định cho biến. Như trong ví dụ 4.7 trên, nếu chúng takhông khởi tạo biến theHour, theMinute, và biến theSecond trước khi truyền như tham sốvào phương thức GetTime() thì trình biên dịch sẽ báo lỗi. Nếu chúng ta sửa lại đoạn mã củaví dụ 4.7 như sau: int theHour; int theMinute; int theSecond; t.GetTime( ref int theHour, ref int theMinute, ref int theSecond);Việc sử dụng các đoạn lệnh trên không phải hoàn toàn vô lý vì mục đích của chúng ta là nhậncác giá trị của đối tượng Time, việc khởi tạo giá trị của các biến đưa vào là không cần thiết.Tuy nhiên khi biên dịch với đoạn mã lệnh như trên sẽ được báo các lỗi sau: Use of unassigned local variable ‘theHour’ Use of ...

Tài liệu được xem nhiều: