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

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.25 MB, 31 trang )


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

05/09/14
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/09/14
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/09/14
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/09/14
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/09/14
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/09/14
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/09/14
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/09/14
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/09/14
Ví dụ
static void test (int k , string s)
{ k++;
s=s + s;
return;
}
static void call ( )
{int i =12;
test (i ,”abc”) ;

}


abc
12
12
i
k
s

05/09/14
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/09/14

05/09/14
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/09/14
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/09/14
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/09/14

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

05/09/14
Ví dụ :VariableParams2.cs
static void Average(out double avg, params int[ ]
mark)

{
int sum=0;
for(int i=0;i<mark.Length;i++) sum+=mark[i];
avg=(double)sum/mark.Length;
}
static public void Main()
{
double tb;
Average (out tb, 7,7,8,4,6);
System.Console.WriteLine(tb);
}

05/09/14
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/09/14
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 ngoài
“hàm” cho tới lúc này !!!

05/09/14
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;i<rs.Length;i++) rs[i]=2*i;
return rs;
}
static public void Main()
{
int[ ] kq;
kq=Test(10);
for( int i=0;i<kq.Length;i++)

Console.WriteLine(kq[i]+" ");
}

05/09/14
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/09/14
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/09/14


05/09/14
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));
}
}

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×