Tải bản đầy đủ (.ppt) (31 trang)

Bài giảng Cơ sở lập trình Csharp: Bài 6 - Hàm (phương thức)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 31 trang )

HÀM (Phương
Thức)
05/21/21


Lưu Ý
Trong C/C++, các hàm (function) có thể thiết kế
ngịai các lớp
Trong C#, các hàm phải nằm trong 1 lớp  gọi là
phương thức
 Trong phần này, ta sẽ gọi là phương thức hay
hàm : đều có cùng 1 nghĩa

05/21/21


Mục đích sử dụng phương thức
-Chia và Trị (Divide & Conquer)
-Sử dụng lại (Reusability)
Dùng lại các lớp và phương
thức để xây dựng các ứng
dụng mới
-Giảm sự lặp lại
Các phương thức có thể gọi
thi hành từ bất kỳ nơi đâu
trong chương trình
05/21/21


Khai báo 1 “hàm”
Phần tiêu đề


[static] [phạm vi] <Kiểu kết quả >
< Tên Hàm > ( Danh sách tham số)

Phần thân
Chứa các mã lệnh mà phương thức
thi hành
Trả về kết quả sau khi thực hiện
(bằng phát biểu return)
05/21/21


Một số đề nghị
 Tạm thời khai báo các “hàm” với từ khóa static
 Trong phạm vi mơn học, có thể khai báo “hàm”
là public hay không tuỳ ý !!!
 Ví dụ có các khai báo “hàm”

static void Test ( ) { ….. }
static public int Exam (int k)
{…. }
static string MyStr( char c) {…….}

05/21/21


Ví dụ khaí báo “hàm”
static void Test() { …. }
static int Exam(int x) { …. }
static string Dummy (string s, float f) {…..}
static float ViDu ( ) {......}

Lưu ý :
Nếu khơng có static  thơng báo lỗi
Sẽ giải thích vào buổi sau

05/21/21


Khai báo biến trong “hàm”
 Biến (Variables)

Khai báo trong 1 phương thức =
biến địa phương/cục bộ
 Chỉ có phương thức chứa khai báo biến mới có
thể truy cập nó

 Sử dụng p/pháp gửi tham số
nhằm giao tiếp với cá phương
thức khác
05/21/21


Ví dụ :
static string MySubStr(string s, int pos, int length)
{
string rs="";
for (int i=1,j=pos;i<=length;i++,pos++)
rs=rs+s[pos];
return rs;
}
static public void Main()

{
string str="This is the second lesson !!!";
Console.WriteLine(MySubStr(str,8,10));
}
05/21/21


Chuyển tham số cho 1 phương thức
Chuyển theo giá trị (Passing
by value)
-Gửi 1 bản sao giá trị cho phương
thức
-Ngầm định là chuyển theo giá trị
-Khơng tác động đến biến bên
ngịai

05/21/21


Ví dụ
static void test (int k , string s)
{ k++;
abc s
s=s + s; k 12
return;
}
static void call ( )
{int i =12;
12 i
test (i ,”abc”) ;

}
…...
05/21/21


Chuyển theo tham chiếu(Passing by reference)
 Gửi tham chiếu đến phương thức (có 2 cách)

Sử dụng từ khóa ref để qui định
chuyển theo tham chiếu (nhưng
phải cấp phát vùng nhớ trước)
Tác động đến biến bên ngịai
Có thể xem tương đương VAR
hoặc
Sử dụng từ khóa out (khơng
cần cấp phát vùng nhớ)
Trong “hàm” phải thực hiện việc
cấp phát vùng nhớ
05/21/21


05/21/21


Ví dụ:
using System;
class Vidu2_8
{
static void TestRef (ref int i, float f)
{ i++;f++; return;}

static public void Main()
{int k=5;
float g =12.5f;
TestRef(ref k,g); // phải có từ khóa ref
Console.WriteLine(" k = {0} , g = {1} " ,k,g);
}}
05/21/21


Ví dụ :
static void TestOut (out int i, out float f)
{
//i++; SAI : việc cấp phát i và f thực hiện trong hàm này
i=5;
f=6;
return;
}
static public void Main()
{
int k=5;
float g;
TestOut(out k,out g);
Console.WriteLine(" k = {0} , g = {1} " ,k,g);
}

05/21/21


Hàm/phương thức tham số thay đổi
Trong nhiều trường hợp, có khả năng 1

phương thức không biết trước số lượng
tham số sẽ đưộc gửi đến nó
C# cho phép thiết kế các phương thức có
tham số thay đổi
Lưu ý :
- Với tham số thay đổi, ta thường khai báo
ở dạng 1 mảng (array)
- Có thể sử dụng foreach hay for với kích
thước mảng để xử lý các tham số
05/21/21


05/21/21


Ví dụ :VariableParams.cs
static double AddList(params double[ ] L)
{
double result=0;
for(int i=0;ireturn result;
}
static void Main(string[ ] args)
{
System.Console.WriteLine ( AddList(12,24,36) );
}

05/21/21



Ví dụ :VariableParams2.cs
static void Average(out double avg, params int[ ]
mark)
{
int sum=0;
for(int i=0;iavg=(double)sum/mark.Length;
}
static public void Main()
{
double tb;
Average (out tb, 7,7,8,4,6);
System.Console.WriteLine(tb);
}

05/21/21


Lưu ý
 Thời gian tồn tại (Duration)

Thời gian mà biến tồn tại trong bộ
nhớ
 Phạm vi (Scope)

Phạm vi chương trình có thể truy
xuất biến
 Biến địa phương(Local variables)

Tạo ra khi khai báo

Bị xóa bỏ khi ra khỏi khối
05/21/21


Phạm vi truy xuất biến
Phạm vi của 1 biến là khu vực của chương
trình có thể truy xuất đến biến này.

Phạm vi khối - Block scope
Từ vị trí khai báo Cho đến
cuối khối
Chỉ được phép sử dụng trong
khối
 Không thể truy xuất từ bên ngịai

Khơng thể trùng lặp tên biến
trong khối
Nhắc lại : khơng khai báo biến bên ngồi
“hàm” cho tới lúc này !!!
05/21/21


Lưu Ý :
 Kết quả trả về có thể là 1 mảng
static int[ ] Test(int k)
{
int[ ] rs = new int[k];
for(int i=0;ireturn rs;
}

static public void Main()
{
int[ ] kq;
kq=Test(10);
for( int i=0;iConsole.WriteLine(kq[i]+" ");
05/21/21}


Overload hàm/phương thức
Là các phương thức có cùng tên nhưng
khác nhau về
-Số lượng tham số
-Thứ tự tham số
-Kiểu dữ liệu của tham số
-Kiểu truyền tham số
Ưu điểm
-Cùng 1 tên hàm/phương thức cho nhiều xử lý
trên các kiểu dữ liệu khác nhau
-Cơ sở cho OOP: hàm xây dựng,đa hình,….

05/21/21


Lưu Ý
Kết quả trả về khác nhau không phải là cơ sở cho
việc thiết kế overloading hàm/phương thức
Ví dụ

int Test(float x) {……}

string Test(float y) {…..} //Sai vì trùng
float Test() {…..}
int Test(int x, int y) {……}
void Test() {….}
int Test (int y, int x) {……} // Sai vì trùng

05/21/21


05/21/21


Ví dụ : Overload.cs
public class Overload
{
static string Add(string s1, string s2)
{return s1+s2;}
static int Add(int i1, int i2)
{ return i1+i2;}
static public void Main()
{
System.Console.WriteLine(Add("abc","123"));
System.Console.WriteLine(Add(23,10));
}
}
05/21/21


×