BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC UEH
TRƯỜNG CÔNG NGHỆ VÀ THIẾT KẾ
KHOA CÔNG NGHỆ THÔNG TIN KINH DOANH
--------
MÔN: CƠ SỞ LẬP TRÌNH
ĐỀ TÀI: PHƯƠNG THỨC (METHOD)
SINH VIÊN THỰC HIỆN:
HUỲNH THÁI QUYỀN
MSSV:
31201023981
LỚP:
EC003
GIẢNG VIÊN HƯỚNG DẪN:
ThS. ĐỖ THỊ BÍCH LỆ
MÃ LỚP HỌC PHẦN:
22D1INF50900504
-THỰC HIỆN NĂM 20220
PHỤ LỤC
LỜI CẢM ƠN ................................................................................................................2
Định nghĩa về phương thức ......................................................................................3
I.
1. Định nghĩa: ............................................................................................................3
2. Tạo một phương thức trong C# .............................................................................3
II. Gọi phương thức .......................................................................................................3
1. Phương thức trả về một giá trị ...............................................................................4
2. Phương thức kiểu Void..........................................................................................5
III.
Đối số được truyền theo tham chiếu .....................................................................7
1. Từ khoá Ref ...........................................................................................................8
1. Từ khoá Out .........................................................................................................10
IV.
Ví dụ về phương thức: .........................................................................................10
1
LỜI CẢM ƠN
Lời đầu tiên, em xin được gửi lời cảm ơn chân thành nhất đến cơ Đỗ Thị Bích Lệ
– Giảng viên học phần Cơ sở lập trình đã dạy cho em thêm nhiều kiến thức bổ ích
và cả những ứng dụng thực tế của môn học này. Nhờ những kiến thức mà thầy
truyền đạt, sự hướng dẫn tận tình của Cơ mà em có thể hồn thành được bài Tiểu
luận kết thúc học phần môn Cơ sở lập trình.
Do bài tiểu luận được thực hiện trong thời gian có hạn, tài liệu tham khảo và kinh
nghiệm bản thân còn hạn chế nên nội dung bài làm vẫn còn những thiếu sót. Vì
vậy, em rất mong được những góp ý từ Cơ để bài làm của em được hồn thiện
hơn.
Em kính chúc Cơ thật nhiều sức khỏe và ngày càng thành cơng trong sự nghiệp
của mình.
Em xin chân thành cảm ơn Cô!
2
I.
Định nghĩa về phương thức
1. Định nghĩa:
-
Một phương thức trong C# là một khối lệnh mà chỉ được thực thi khi được gọi.
-
Bạn có thể truyền dữ liệu (cịn được gọi là tham số) vào một hàm.
-
Phương thức còn được gọi là hàm được sử dụng để thực hiện một hành động cụ
thể nào đó.
-
Phương thức có thể được tái sử dụng, điều này có nghĩa là bạn có thể định nghĩa
phương thức 1 lần và gọi nó ở nhiều nơi.
2. Tạo một phương thức trong C#
-
Một phương thức được định nghĩa với tên của phương thức, theo sau là dấu ngoặc
đơn (). C# cung cấp một số phương thức được định nghĩa trước mà bạn đã thấy
trong các bài trước, chẳng hạn như Main(), nhưng bạn cũng có thể tạo các phương
thức của riêng mình để thực hiện một số nhiệm vụ nhất định:
-
Ví dụ: Tạo một phương thức bên trong lớp Program:
-
Trong đó:
+ MyMethod(): là tên của phương thức
+ static: có nghĩa là phương thức này thuộc về lớp Program chứ không phải là
một đối tượng của lớp Program.
+ void: có nghĩa là phương thức này khơng có giá trị trả về.
II.
Gọi phương thức
Khi gọi phương thức, chúng ta phải cung cấp đầy đủ thông tin cho phương thức như
các đối số (argument) hay biến để nhận giá trị trả về (nếu có). Cú pháp để gọi một
phương thức có thể như sau:
result = methodName ( argumentList )
methodName là tên phương thức và lưu ý rằng C# là case-sensitive
argumentList là danh sách đối số hay danh sách các giá trị thực của các tham số khi
khai báo phương thức
3
result là biến nhận giá trị trả về nếu có của phương thức, nếu phương thức khơng có
kiểu dữ liệu trả về, chúng ta phải bỏ lệnh result =.
Ví dụ và kết quả:
1. Phương thức trả về một giá trị
-
Một phương thức có thể trả về một giá trị. Kiểu trả về là kiểu dữ liệu của giá trị
phương thức trả về. Nếu phương thức này không trả lại bất kỳ giá trị nào thì kiểu
trả về là void.
-
Ví dụ 1:
-
Kết quả:
4
-
Ví dụ 2:
-
Kết quả VD2:
-
Khi một phương thức muốn trả về một giá trị, chúng ta cần dùng từ khoá return
như trong ví dụ. Nếu phương thức khơng có giá trị trả về, chúng ta dùng từ khoá
void cho kiểu dữ liệu trả về, từ khố return có thể được dùng (nhưng khơng có
giá trị) hay khơng cần dùng return.
2. Phương thức kiểu Void
-
Là phương thức khơng có kiểu dữ liệu trả về (void method)
-
Ví dụ 1:
5
-
Kết quả ví dụ 1:
-
Ví dụ 2 về khi dùng void và không dùng void:
6
- Kết quả ta có được:
=> Phương thức với kiểu dữ liệu void trả về giá trị được in ra màn hình bằng lệnh
ConsoleWrite/ConsoleWriteLine. Điều này khiến cho khó có thể tái sử dụng phương
thức trong những trường hợp khác nhau, nếu muốn phải sửa lại câu lệnh gốc.
Giá trị trả về của hàm void không thể sử dụng để thực hiện tính tốn.
III.
-
Đối số được truyền theo tham chiếu
Phương pháp này sẽ copy bản tham chiếu vị trí bộ nhớ của một đối số vào các
tham số chính thức. Điều này có nghĩa rằng những thay đổi trên các tham số sẽ
ảnh hưởng đến các đối số.
-
Có thể sử dụng từ khoá out hoặc ref để thực hiện truyền đối số theo tham chiếu
nghĩa là những thay đổi cho đối số sẽ bị ảnh hưởng sau khi kết thúc phương thức.
-
Chúng khá giống nhau, sự khác biệt duy nhất là một biến mà bạn chuyển vào làm
tham số out không cần phải được khởi tạo và phương thức sử dụng tham số ref
phải đặt nó thành một thứ gì đó.
7
-
Tham số ref dành cho dữ liệu có thể được sửa đổi, tham số out dành cho dữ liệu
là đầu ra bổ sung cho hàm (ví dụ: int.TryParse) đã sử dụng giá trị trả về cho một
thứ gì đó.
-
Đối với ref, đối số phải được khai báo và khởi tạo.
-
Đối với out, đối số phải được khai báo nhưng có thể được khởi tạo hoặc khơng
-
Ví dụ:
-
Kết quả:
1. Từ khố Ref
-
Ref có nghĩa là giá trị trong tham số ref đã được đặt sẵn, phương thức có thể đọc
và sửa đổi nó. Sử dụng từ khóa ref cũng giống như nói rằng người gọi chịu trách
nhiệm khởi tạo giá trị của tham số.
8
-
Một biến của ref từ khóa phải có một giá trị hoặc phải tham chiếu đến một đối
tượng hoặc null trước khi nó đi qua.
-
Trong C #, bạn khai báo các tham số tham chiếu bằng từ khóa ref.
-
Ví dụ ban đầu chưa chưa dùng ref:
=> đoạn code này sẽ không thay đổi giá trị của value khi truyền biến value vào hàm
IncreaseValue cho kết quả sau:
- Vì vậy muốn thay đổi giá trị của value thông qua hàm IncreaseValue thì chỉ cần thêm
từ khố 'ref' vào trước biến value. Ví dụ khi thêm Ref:
-
Lúc này kết quả cho được là:
=> trường hợp sử dụng ref thì phải gán giá trị ban đầu cho biến value : int value = 5
9
1. Từ khố Out
Từ khóa out cũng được sử dụng để truyền một đối số như từ khóa ref, nhưng đối
-
số có thể được truyền mà khơng cần gán bất kỳ giá trị nào cho nó. Đối số được
truyền bằng cách sử dụng từ khóa out phải được khởi tạo trong phương thức được
gọi trước khi nó quay trở lại phương thức gọi.
Nếu sử dung out thì khơng cần khởi tạo giá trị ban đầu, chỉ cần khai báo tên biển:
-
int value;
-
Ví dụ:
-
Kết quả:
Ví dụ về phương thức:
IV.
Bài 1: Bài tập mảng 2 chiều theo phương thức
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int n, m;
10
Console.Write("Nhap so dong: ");
n = int.Parse(Console.ReadLine());
Console.Write("Nhap so cot: ");
m = int.Parse(Console.ReadLine());
double[,] A = new double[100, 100];
Nhapmang(A, n, m);
Xuatmang(A, n, m);
phantulap(A, n, m);
Console.ReadLine();
}
static void Nhapmang(double[,] a, int n, int m)
{
Random r = new Random();
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
a[i, j] = r.Next(1, 20);
Console.WriteLine("arr[" + (i + 1) + "," + (j + 1) + "]=" + a[i, j]);
}
}
}
static void Xuatmang(double[,] a, int n, int m)
{
Console.WriteLine("Xuat mang hai chieu:");
for (int i = 0; i < n; i++)
{
11
for (int j = 0; j < m; j++)
{
Console.Write("\t" + a[i, j] + " ");
}
Console.WriteLine();
}
}
//lặp lại nhiều nhất
static void phantulap(double[,] a, int n, int m)
{
double[] B = new double[n * m]; int k = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
B[k++] = a[i, j];
}
}
double[] C = new double[k];
for (int i = 0; i < k; i++)
{
for (int j = i; j < k; j++)
{
if (B[j] == B[i]) C[i]++;
}
}
double max = 1;
12
for (int i = 0; i < k; i++)
{
if (C[i] > max) max = C[i];
}
Console.Write("So xuat hien nhieu nhat la: ");
for (int i = 0; i < k; i++)
{
if (C[i] == max)
{
Console.Write(B[i] + " ");
Console.WriteLine("Gia tri " + B[i] + " xuat hien " + C[i] + " lan!\n");
}
}
}
}
}
-
Kết quả:
13
Bài 2: Bài tập chuỗi theo phương thức:
-
using System;
using System.Linq;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
Console.Write("Nhap vao chuoi can kiem tra : ");
string name = Console.ReadLine();
DoiXung(name);
DaoNguocCacTu(ref name);
Console.WriteLine("string: " + name);
string str2;
DemCau(out str2);
Console.ReadKey();
}
static void DoiXung(string name)
{
string reverse = string.Empty;
for (int i = name.Length - 1; i >= 0; i--)
{
reverse += name[i];
}
14
if (name == reverse)
{
Console.WriteLine($"{name} la chuoi doi xung.");
}
else
{
Console.WriteLine($"{name} khong phai chuoi doi xung");
}
}
static void DaoNguocCacTu(ref string str)
{
str = string.Join(" ", str.Split(' ').Reverse());
}
static void DemCau(out string str)
{
str = "Em cam on co rat nhieu a.";
Console.WriteLine(str);
int max = 0;
int soDauCham = 0;
for (int i = 0; i < str.Length; i++)
{
int count = 0;
while (true)
{
if (str[i] != 46)
{
count++;
15
i++;
}
else
{
soDauCham = soDauCham + 1;
break;
}
}
if (count > max)
max = count;
i++;
}
Console.WriteLine("Co " + soDauCham + " cau va cau dai nhat co " + max
+ " ky tu.");
}
}
}
-
Kết quả:
16