1. Trang chủ
  2. » Tất cả

Tiểu luận môn cơ sở lập trình đề tài phương thức trong c

19 1 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phương thức trong C#
Tác giả Hứa Tuệ Phương
Người hướng dẫn Th.S Đỗ Thị Bích Lệ
Trường học Trường Đại học Công nghệ và Thiết kế
Chuyên ngành Cơ sở lập trình
Thể loại Tiểu luận
Năm xuất bản 2022
Thành phố TP.HCM
Định dạng
Số trang 19
Dung lượng 525,86 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Untitled TP HCM, 24/4/2022 TIỂU LUẬN KẾT THÚC HỌC PHẦN BỘ MÔN CƠ SỞ LẬP TRÌNH ĐỀ TÀI PHƯƠNG THỨC TRONG C# Sinh viên Hứa Tuệ Phương MSSV 31201020800 Mã lớp học phần 22D1INF50900504 Giảng viên Th S Đỗ T[.]

Trang 1

TP.HCM, 24/4/2022

TIỂU LUẬN KẾT THÚC HỌC PHẦN

BỘ MÔN: CƠ SỞ LẬP TRÌNH

ĐỀ TÀI:

PHƯƠNG THỨC TRONG C#

Sinh viên: Hứa Tuệ Phương MSSV: 31201020800

Mã lớp học phần: 22D1INF50900504 Giảng viên: Th.S Đỗ Thị Bích Lệ

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CÔNG NGHỆ và THIẾT KẾ_ĐẠI HỌC UEH

KHOA CÔNG NGHỆ THÔNG TIN KINH DOANH

Trang 2

-o0o -MỤC LỤC

1 PHƯƠNG THỨC (METHOD) 3

1.1 Chi tiết các phần tử của phương thức: 3

1.2 Gọi phương thức trong C# 5

2 PHƯƠNG THỨC TRẢ VỀ MỘT GIÁ TRỊ 7

3 PHƯƠNG THỨC KIỂU VOID 8

3.1 Kiểu void không đối số Nó được dùng để hiển thị các thông báo 9

3.2 Kiểu void có đối số đưa vào nhưng không có đối số lấy ra 9

3.3 Kiểu void không có đối số đưa vào nhưng có đối số lất ra khỏi hàm 10

3.4 Kiểu void có cả đối số vào và đối số ra 10

4 Phương thức tĩnh (static method) 11

4.1 Cú pháp: 11

4.2 Ví dụ: 12

5 Phương thức đệ quy 13

6 Truyền tham số cho phương thức: kiểu dữ liệu giá trị và tham chiếu 14

6.1 Tham số giá trị (value type) 14

6.2 Tham số tham chiếu 15

6.2.1 Từ khóa ref (reference type) 16

6.2.2 Từ khóa out 17

7 Một số vấn đề khác của phương thức 19

7.1 Phương thức với Expression body 19

7.2 Named Arguments 19

8 TỔNG KẾT 20

Tài liệu tham khảo 21

1 PHƯƠNG THỨC (METHOD)

Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ Khi định nghĩa một phương thức, về cơ bản, chúng ta khai báo các phần tử của cấu trúc của nó Cú pháp để định nghĩa một phương thức trong C# như sau:

Trang 3

<Access Specifier> <Ki u_tr _v > ể ả ề

<Tên_phương_th c>(Danh_sách_tham_s )ứ ố

{

Ph n thân phầ ương th cứ

}

1.1 Chi tiết các phần tử của phương thức:

 Access Specifier: Định nghĩa tính nhìn thấy của một biến hoặc một phương thức với

lớp khác Một số mức độ hay gặp: Public, private, protect, internal, …

Hình 1 Bảng tóm tắt (Trích: Access Modifiers (C# Programming Guide))

 Kiểu_trả_về: 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ị mà phương thức trả về Nếu phương thức không trả về bất kỳ giá trị nào,

thì kiểu trả về là void.

static int Sum(int a, int b)

Một số kiểu dữ liệu thường gặp: int, double, float, string, char, long,…

 Tên_phương_thức: Tên phương thức là một định danh duy nhất và nó là phân biệt

kiểu chữ Nó không thể giống bất kỳ định danh nào khác đã được khai báo trong lớp đó

Trang 4

Tên phương thức tuân thủ theo quy tắc đặt định danh của C# và do người dùng tự đặt Tên phương thức phân biệt chữ hoa và thường C# quy ước tên phương thức viết theo kiểu PascalCase (luôn bắt đầu bằng chữ in hoa) [ CITATION Chi19 \l 1033 ] static double Binhphuong(double so)

Ví dụ: Phương thức Max nhận hai số nguyên và trả về số nào nhỏ hơn trong hai số

Nó có chỉ thị truy cập là public, vì thế nó được truy cập từ bên ngoài vào lớp bằng cách sử dụng một thể hiện của lớp đó:

class Tim GTNN trong 2 so

{

public int Min(int so1, int so2)

{

return so1 < so2 ? so1 : so2;

}

}

 Danh_sách_tham_số: Danh sách tham số được bao quanh trong dấu ngoặc đơn, các

tham số này được sử dụng để truyền và nhận dữ liệu từ một phương thức Danh sách tham số liên quan tới kiểu, thứ tự, và số tham số của một phương thức Các tham số

là tùy ý, tức là một phương thức có thể không chứa tham số nào

Ở giai đoạn khai báo phương thức, chúng ta không biết giá trị cụ thể của các biến này

mà chỉ có thể sử dụng tên biến trong các lệnh ở thân phương thức Đến giai đoạn gọi phương thức, người sử dụng mới cung cấp các giá trị cụ thể (gọi là tham số thực) Danh sách tham số được khai báo theo cú pháp sau:

< ki u_d _li u_1 > < tham_s _1 >, < ki u_d _li u_2 > < tham_s _2ể ữ ệ ố ể ữ ệ ố

>,

Hình dung đơn giản, danh sách tham số là một chuỗi khai báo các biến cục bộ viết tách nhau bởi dấu phẩy Do đó, mỗi tham số đều tuân thủ quy tắc khai báo [ CITATION Chi19 \l 1033 ]

< ki u_d _li u > < tên bi n >;ể ữ ệ ế Danh sách tham số không bắt buộc trong phần khai báo phương thức Ta có thể viết cặp dấu ngoặc tròn () sau tên phương thức nếu danh sách tham số trống [ CITATION Chi19 \l

1033 ]

Vd:

int n, a, b;

Trang 5

Phần thân phương thức: Phần thân phương thức chứa tập hợp các chỉ thị cần thiết để

hoàn thành hoạt động đã yêu cầu

1.2 Gọi phương thức trong C#

Phương thức trong C# bắt buộc là thành viên của một class hoặc struct nào đó (trừ phương thức lambda, phương thức vô danh và hàm cục bộ) Khai báo phương thức trong C# không thể nằm trực tiếp trong namespace, ngoài namespace, hoặc ngoài class/struct

Ở giai đoạn sử dụng (gọi phương thức), người dùng cung cấp giá trị đầu vào thực (nếu có) và nhận giá trị trả về (nếu có) qua “lời gọi phương thức” theo cấu trúc: [ CITATION Chi19 \l 1033 ]

Tên phương thức ([biến_1, biến_2, ]);

Trong đó biến 1, biến 2, phải có kiểu dữ liệu theo đúng trật tự như khi khi định nghĩa phương thức Danh sách biến cung cấp cho lời gọi phương thức là các tham số thực (để phân biệt với danh sách tham số hình thức khi khai báo phương thức)

có một tham số kiểu double, trả về kiểu double là bình phương của tham số Sau đó gọi hàm tính bình phương của 5

using System;

namespace EC003_Method

{

class Program //l pớ

{

/// Tính căn b c 2 c a s th c doubleặ ủ ố ự

static float canbac2(double so)

{

float ketqua = math.sqrt(so);

return ketqua;

}

static void Main(string[] args)

{

// G i phọ ương th c Canbac2ứ

float cb2 = canbac2(9);

Console.WriteLine("Can bac 2 cua 9: " + bp);

}

}

}

Chạy chương trình sẽ in ra:

Can bac 2 cua 9: 3

Trang 6

Nhìn vào phần khai báo phương thức BinhPhuong, thấy không chỉ rõ Access

Modify nào, điều này có nghĩa hàm có Access Modify mặc định là internal nghĩa là viết đầy đủ thì sẽ là:

static internal double BinhPhuong(double number)

Một phương thức có thể được gọi nhiều lần, ví dụ:

using System;

namespace TuePhuong

{

class Phuongthuc2

{

static void Main(string[] args)

{

Phuongthuc();

Console.WriteLine("Tich cua 5 va 29 la: "

+ Tich(5, 29));

Console.WriteLine("Tich cua 10 va 29 la: "

+ Tich(10, 29));

Console.WriteLine("Tich cua 15 va 29 la: "

+ Tich(15, 29));

//d li u đữ ệ ược hi n th theo th t trong static này, ể ị ứ ự //Phuongthuc(), Tich() được g i dọ ở ưới

}

// G i phọ ương th c tích đ đ a d li u lên trênứ ểể ư ữ ệ

static int Tich(int a, int b)

{

return a * b;

}

// G i phọ ương th c đ đ a d li u lên trênứ ểể ư ữ ệ

static void Phuongthuc()

{

Console.WriteLine("Phuong thuc trong C#");

}

}

Kết quả:

Phuong thuc trong C#

Tich cua 5 va 29 la: 145

Tich cua 10 va 29 la: 290

Tich cua 15 va 29 la: 435

Trang 7

2 PHƯƠNG THỨC TRẢ VỀ MỘT GIÁ TRỊ

Các phương thức có thể trả về một giá trị cho trình gọi Nếu không phải kiểu trả về (kiểu được liệt kê trước tên phương thức) void, phương thức có thể trả về giá trị bằng cách sử dụng từ khóa return Một câu lệnh có từ khóa return theo sau là một biến, hằng số hoặc biểu thức phù hợp với kiểu trả về sẽ trả về giá trị đó cho trình gọi phương thức Các phương thức

có kiểu trả về không void bắt buộc phải sử dụng từ khóa return để trả về giá trị Từ khóa return cũng dừng việc thực thi phương thức

Nếu kiểu trả về là void, một câu lệnh return không có giá trị vẫn hữu ích để dừng việc thực thi phương thức Nếu không có từ khóa return, phương thức sẽ ngừng thực thi khi nó đến cuối khối mã

Cú pháp chung như sau:

[public|protected|private] <ki u_d _li u_tr _v > <tên_phể ữ ệ ả ề ương_th c>ứ ([danh sách tham s ])ố

{

[thân phương th c]ứ

[return <giá tr >;]ị

}

Nếu một phương thức (hàm) có trả về giá trị kiểu dữ liệu nào đó thì return phải trả về giá trị

có đúng kiểu dữ liệu tương ứng với kiểu dữ liệu mà phương thức (hàm) đã định nghĩa Ví dụ hàm tính diện tính hình tròn

// Đ nh nghĩa 1 hàm tính di n tích có ki u d li u double, bán ị ệ ể ữ ệ kính ki u d li u intể ữ ệ

static double TinhDienTichHinhTron(int r)

{

double s = r * r * Math.PI;

//Tr v giá tr ki u doubleả ề ị ể

return s;

}

// Nh p bán kính và in ra màn hình di n tích hình trònậ ệ

static void Main(string[] args)

{

int r = 6;

Console.WriteLine("Ban kinh hinh tron: {0}", r);

double kq = TinhDienTichHinhTron(r);

Console.WriteLine("Dien tich hinh tron: {0:0.00}", kq);

Trang 8

Kết quả:

6

Ban kinh hinh tron: 6

Dien tich hinh tron: 113.10

3 PHƯƠNG THỨC KIỂU VOID

Trong bài hàm trong C chúng ta đã biết hàm trong C là một tập hợp các xử lý nhằm thực

hiện một chức năng cụ thể nào đó trong chương trình Nói cách khác thì chúng ta nhập một thông tin (đối số) vào hàm, thông tin này sẽ được xử lý trong hàm, và hàm sẽ xuất lại một thông tin (giá trị trả về) cho chúng ta sau khi hàm kết thúc.

Việc nhập và xuất trong hàm có thể được chọn lần lượt từ việc [có thông tin] và [không có thông tin] Nói cách khác thì chúng ta có thể lựa chọn thông tin nhập xuất từ 1 trong 4

trường hợp như sau:

Mô hình đầu vào và đầu ra trong hàm C

Và trong các trường hợp nhập xuất ở trên, [kiểu void] được sử dụng như một kiểu dữ liệu

để chỉ ra rằng đầu vào và đầu ra không tồn tại trong hàm [ CITATION Kiy21 \l 1033 ]

Có người gọi phương thức kiểu Void là phương thức không trả về giá trị Tuy nhiên nếu phương thức có đối số là tham chiếu thì nó có trả về nhiều giá trị đồng thời Vì vậy, ở đây ta vẫn để nguyên kiểu “Void” mà không cần dịch ra tiếng Việt [ CITATION Phạ07 \l 1033 ]

Có thể chia kiểu void thành 4 loại:

Trang 9

3.1 Kiểu void không đối số Nó được dùng để hiển thị các thông báo.

double getPI(void)

{

return 3.141592;

}

3.2 Kiểu void có đối số đưa vào nhưng không có đối số lấy ra

Nó thuồng dùng để hiển thị thông báo, tính toán một biểu thức nào đó rồi hiển thị kết quả ra màn hình

void printNum(int num)

{

printf("%d\n", num);

}

3.3 Kiểu void không có đối số đưa vào nhưng có đối số lất ra khỏi hàm

Nó thường dùng để nhập dữ liệu từ bàn phím và đưa ra khỏi hàm Các đối số lấy ra phải là đối số kiểu tham chiếu như kiểu có từ khóa ref hay từ khóa out

void Hello(void)

{

printf("Hello\n");

}

3.4 Kiểu void có cả đối số vào và đối số ra

using System;

using System.Linq;

namespace ConsoleApp1

{

class Program

{

static void Main(string[] args)

{

//kh i t o s lở ạ ố ượng s trong m ngố ả

Console.Write("So luong phan tu trong mang :");

int n = int.Parse(Console.ReadLine()); // vì console.read nó

s đ c d li u là chu i nh ng mình c n d li u s nên ph i dùng ẽ ọ ữ ệ ổ ư ầ ữ ệ ố ả

int.parse

Random rnd = new Random();

int[] arr = new int[n];

Trang 10

for (int i = 0; i < n; i++)

{

arr[i] = rnd.Next(6); // random t 0 t i 6ừ ớ

}

int maxValue = arr.Max();

Console.WriteLine("Max : " + maxValue); //gán giá tr l n ị ớ

nh t, r i so sánh t t v i các s còn l i đ đ m saoấ ồ ừ ừ ớ ố ạ ể ế

for (int i = 0; i < arr.Length; i++)

{

Console.Write(arr[i] + " ");

}

Console.WriteLine();

for (int i = 0; i < maxValue; i++)

{

for (int j = 0; j < arr.Length; j++)

{

if (arr[j] > 0)

{

Console.Write("*" + " ");

arr[j] ;

}

else

{

Console.Write(" " + " ");

}

}

Console.WriteLine();

}

}

}

}

Kết quả:

4 Phương thức tĩnh (static method)

Phương thức tĩnh liên kết với bản thân class chứ không liên kết với object của class đó Do

đó cũng chỉ có duy nhất 1 phiên bản của phương thức đó được tạo ra Về cú pháp khai báo, phương thức tĩnh khác biệt với phương thức thành viên duy nhất ở từ khóa static đặt trước tên kiểu trả về

Trang 11

4.1 Cú pháp:

<ph m vi truy c p> ạ ậ static <ki u tr v > ể ả ề <tên ph ươ ng th c> ứ

{

// n i dung ph ộ ươ ng th c ứ

}

Trong đó:

<phạm vi truy cập> là các phạm vi đã trình bày trong mục Phương thức

static là từ khoá để khai báo thành viên tĩnh.

<kiểu trả về> là kiểu trả về của phương thức (đã được trình bày trong mục Phương

thức)

<tên phương thức> là tên do người dùng đặt và tuân thủ các quy tắc đặt tên (các quy

tắc đặt tên đã trình bày trong bài BIẾN TRONG C#)

Hàm tĩnh được sử dụng với 2 mục đích chính:

 Hàm tĩnh là 1 hàm dùng chung của lớp Được gọi thông qua tên lớp và không cần khởi tạo bất kỳ đối tượng nào, từ đó tránh việc lãng phí bộ nhớ

 Hỗ trợ trong việc viết các hàm tiện ích để sử dụng lại

Về sử dụng thì bạn thao tác hoàn toàn giống 1 phương thức bình thường chỉ cần lưu ý là phải gọi phương thức này thông qua tên lớp

4.2 Ví dụ:

Bạn viết 1 hàm Tính toán đó là tính luỹ thừa của 1 số nguyên để hỗ trợ tính toán. using System;

namespace TuePhuong

{

class Phuongthuctinh

{

static void Main(string[] args)

{

// S d ng tr c ti p tên class đ truy c p vào ử ụ ự ế ể ậ

phuongthuctinh mà không c n kh i t o đ i tầ ở ạ ố ượng student

Sinhvien.PrintName("Hua Tue Phuong",

Sinhvien.PrintName("Welcome to", "bai thuyet trinh cua nhom 2 hom nay");

Console.ReadKey();

}

}

public class Sinhvien

{

Trang 12

// Khai báo phương th c tĩnhứ

public static void PrintName(string Ho, string Ten)

{

string hoten = string.Format("{0} {1}", Ho, Ten);

Console.Writeline("Ho ten sinh vien:"+ hoten);

}

}

Kết quả khi chạy chương trình trên:

Ho ten sinh vien: Hua Phuong

Ho ten sinh vien: Welcome to bai thuyet trinh cua nhom 2 ngay hom nay

5 Phương thức đệ quy

Đệ quy là phương thức khai báo, trong thân của nó có gọi lại chính nó

Ví dụ: Nhập n số bất kỳ và xuất số ngôi sao tương ứng dưới mỗi số theo dạng dọc xuống (Trích bài Kiểm tra giữa kỳ lần 1)

class TinhGiaiThua

{

public int GiaiThua(int num)

{

int ketqua;

if (num == 1)

{

return 1;

}

else

{

ketqua = GiaiThua(num - 1) * num;

return ketqua;

}

}

static void Main(string[] args)

{

Console.OutputEncoding = System.Text.Encoding.UTF8;

TinhGiaiThua n = new TinhGiaiThua();

Console.WriteLine("Giai th a c a 7 là: {0}"ừ ủ ,

n.GiaiThua(7));

Console.ReadLine();

}

}

Kết quả:

Trang 13

Ở ví dụ trên, trong thân phương thức GiaiThua ta đã gọi lại phương thức GiaiThua một lần nữa khi tính ketqua Vì thế nó được gọi là phương thức đệ quy Đệ quy khá giống vòng lặp,

ta cần phải có điều kiện dừng để tránh lặp đệ quy vô tận Hầu hết phương thức đệ quy có thể thay thế bằng các vòng lặp, vì thế nếu vòng lặp đơn giản ta nên ưu tiên vòng lặp thay vì đệ quy Trong nhiều ví dụ kiểm tra về hiệu năng thì đệ quy chậm hơn sử dụng vòng lặp khá nhiều [ CITATION Chi19 \l 1033 ]

6 Truyền tham số cho phương thức: kiểu dữ liệu giá trị và tham chiếu

Kiểu dữ liệu trong C# chia làm 2 loại: kiểu dữ liệu giá trị (value type) và kiểu dữ liệu tham chiếu (reference type) Theo cách phân loại này, object và string thuộc nhóm reference, còn tất cả các kiểu dữ liệu còn lại (int, float, double, ) thuộc nhóm value Đối tượng của kiểu

dữ liệu giá trị nằm trong stack, còn đối tượng của kiểu dữ liệu tham chiếu nằm trong heap Hai loại kiểu dữ liệu này biểu hiện kết quả khác nhau khi sử dụng trong tham số của phương thức

6.1 Tham số giá trị (value type)

Khi truyền tham số giá trị cho phương thức, bản sao của tham số này được tạo ra trong stack của phương thức được gọi Tất cả các thao tác mà phương thức thực hiện trên tham số này đều chỉ tác động trên bản sao

Do đó, sau khi kết thúc phương thức, giá trị của tham số vẫn giữ nguyên như trước khi truyền vào phương thức Tức là những thay đổi (nếu có) của biến trong phương thức không được giữ lại Ví dụ, nếu truyền giá trị i = 10 cho phương thức, một bản sao của i được tạo ra

và truyền vào phương thức Những gì thay đổi trong phương thức thực chất đều chỉ tác động lên bản sao của i, chứ không phải chính i Do vậy, khi kết thúc phương thức, bản sao bị hủy

bỏ, còn i không thay đổi gì Điều này sẽ được thể hiện rõ hơn qua phần ví dụ dưới đây trong phương thức Swap hoán đổi giá trị 2 biến

Truyền tham số giá trị:

private static void Swap(int a, int b)

{

var temp = a;

a = b;

b = temp;

Ngày đăng: 23/02/2023, 22:04

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w