Bài giảng Kỹ thuật lập trình: Chương 2 - ThS. Phạm Thanh An
Trang 1Chương 2
Nền tảng ngôn ngữ C#
Giảng viên: ThS Phạm Thanh An
Khoa công nghệ thông tin
Đại học Ngân hàng Tp Hồ Chí Minh
Nội dung trình bày
Mô tả kiểu dữ liệu trong C#
String Array ValueType Exception Delegate Class1
Multicast Delegate Class2
Class3 Object
Enum1
Structure1 Enum
Trang 2Kiểu dữ liệu
C# là một ngữ mạnh về kiểu dữ liệu
Phải khai báo kiểu của mỗi biến, đối tượng khi
sử dụng
integer, float, string, byte, buttons, v.v
C# chia thành hai tập hợp kiểu dữ liệu chính:
Kiểu xây dựng sẵn (built- in)
Kiểu được người dùng định nghĩa (user-defined)
do người lập trình tạo ra (lớp, struct, v.v).
Kiểu dữ liệu tham chiếu (reference type):
classes, interfaces, arrays và strings
Kiểu dữ liệu xây dựng sẵn
ushort 2 Uint16 Số nguyên không dấu 0 – 65.535
int 4 Int32 Số nguyên có dấu –2.147.483.647 và
2.147.483.647
int val = 12;
uint 4 Uint32 Số nguyên không dấu 0 –
4.294.967.295
Trang 3Kiểu dữ liệu xây dựng sẵn (tt)
sbyte 1 Sbyte Số nguyên có dấu ( từ -128 đến 127)
byte 1 Số nguyên không dấu từ 0 - 255
long 8 Int64 Kiểu số nguyên có dấu có giá trị trong
khoảng : -9.223.370.036.854.775.808 đến 9.223.372.036.854.775.807ulong 8 Uint64 Số nguyên không dấu từ 0 đến
float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ
3,4E-38 đến 3,4E+38, với 7 chữ số
có nghĩa Có thêm hậu tố F sau giá trị
float val = 1.23F;
double 8 Double Kiểu dấu chấm động có độ chính xác
gấp đôi, giá trị xấp xỉ 1.7E308 1.7E+308, với 15,16 chữ số có nghĩadecimal 8 Decimal Chính xác đến 28 con số và giá trị
-thập phân, được dùng trong tính toán tài chính, đòi hỏi hầu tố “m” hay “M”
theo sau giá trị
Kiểu dữ liệu xây dựng sẵn (tt)
bool 1 Boolean Giá trị logic true/ false bool val1 = true;
bool val2 = false;
char 2 Char Ký tự Unicdoe char val = 'h';
Trang 4Kiểu dữ liệu xây dựng sẵn (tt)
Ghi chú:
Kiểu giá trị logic chỉ có thể nhận được giá trị là true hay
false
Khác với C/C++, một giá trị nguyên không thể gán vào
một biến kiểu logic trong C# và không có bất cứ chuyển
đổi ngầm định nào
Biên dịch: xuất hiện lỗi
Error CS0029 : Cannot implicitly convert type 'int' to 'bool '
Kiểu dữ liệu xây dựng sẵn (tt)
Kiểu dữ liệu ký tự thể hiện các ký tự Unicode
Bao gồm các ký tự đơn giản, ký tự theo mã Unicode
và các ký tự thoát khác được bao trong những dấu
nháy đơn
Ký tự thoát là những ký tự đặc biệt bao gồm hai ký tự
liên tiếp trong đó ký tự dầu tiên là dấu chéo ‘\’ Ví dụ,
Trang 5\r Đầu dòng (Carriage return)
\t Tab ngang (Horizontal tab)
\v Tab dọc (Vertical tab)
Chuyển đổi kiểu dữ liệu
Chuyển đổi kiểu dữ liệu này qua kiểu dữ liệ khác
Có 2 cách: chuyển đổi tường minh và ngầm định
Chuyển đổi ngầm định được thực hiện một cách tự
động đảm bảo là không mất thông tin.
Từ kiểu nhỏ sang kiểu lớn
short x = 10;
int y = x; // chuyển đổi ngầm định
Trường hợp này không thực hiện
short x;
int y = 100;
x = y;// Không biên dịch, lỗi !!!
Trang 6Chuyển đổi kiểu dữ liệu (tt)
short x;
int y = 500;
x = (short) y; // Ép kiểu tường minh, trình biên dịch không báo lỗi
sbyte short, int, long, float, double, decimal
byte short, ushort, int, uint, long, ulong, float, double, decimal
short int, long, float, double, decimal
ushort int, uint, long, ulong, float, double, decimal
int long, float, double, decimal
uint long, ulong, float, double, decimal
long, ulong float, double, decimal
char ushort, int, uint, long, ulong, float, double, decimal
Chuyển đổi tường mình
Ép từ kiểu lớn qua kiểu nhỏ: có thể mất giá trị
Ép từ lớp cơ sở qua lớp dẫn xuất
Trang 7Console.WriteLine (“Result is {0} when 100
is multiplied by number {1}”, result, number);
Chuyển đổi tường minh
Chuyển đổi tường minh
Trang 8Input / Output trong C#
Sử dụng các phương thức của lớp Console
trong không gian tên System
Console.ReadLine()
Console.WriteLine()
Định danh
Là tên mà người lập trình chỉ định cho các kiểu dữ
liệu, các phương thức, tên biến, hằng, lớp hay đối
tượng
Định danh không trùng với từ khóa của C#
Định danh phải bắt đầu với một ký tự chữ cái hay dấu
gạch dưới,
các ký tự còn lại phải là ký tự chữ cái, chữ số, dấu gạch dưới
C# phân biệt chữ hoa và chữ thường
Ví dụ:
Định danh đúng: result , _score, footballTeam, plan9
Định danh sai: result%, footballTeam$, 9plan
Các từ khóa của C#
Các từ khóa trong C#
Trang 9Nằm trong bộ nhớ vật lý (physical RAM)
Có thể thay đổi giá trị
Định danh: tên để đại diện cho biến
Kiểu dữ liệu: dạng lưu trữ dữ liệu của biến
Biến (tt)
Bạn có thể khai báo kết hợp khởi đầu giá trị
cho biến
Tên biến không được trùng với từ khóa của
C#, nếu muốn sử dụng từ khóa làm tên biến
phải thêm @ trước từ khóa
Khai báo biến:
<Kiểu> tên biến ;
int tuoi;
tuoi = 21 ;Console.WriteLine(tuoi);
Ví dụ
Trang 10Ví dụ: về khai báo biến
Output: Khởi đầu, myInt: 7 sau khi gán, myInt: 5
Ví dụ: sử dụng từ khóa làm tên biến
<const> <type> <tên hằng> = <giá trị>;
const int DoSoi = 100; // Độ C
const int DoDong = 0; // Độ C
System.Console.WriteLine( “Do dong cua nuoc {0}”, DoDong );
System.Console.WriteLine( “Do soi cua nuoc {0}”, DoSoi );
Trang 11 Trong C#, những khoảng trắng, tab và các
dòng được xem như là khoảng trắng
Trang 12Sử dụng từ khóa phân nhánh : goto, break,
continue, return, throw
Phân nhánh có điều kiện
{ static void Main( )
{ Console.WriteLine(“Trong Main! Gọi hàm SomeMethod( ) ");
SomeMethod( );
Console.WriteLine(“Quay về Main( ).");
}
static void SomeMethod( )
{ Console.WriteLine(“Xin chao tu SomeMethod!");
}
}
}
Trang 14if ( i < 10 )goto lap; // nhãy về nhãn lapreturn 0;
}}
Trang 15 Thực hiện câu lệnh trong khi điều kiện vẫn còn đúng
Câu lệnh break sẽ thoát ngay khỏi vòng lặp
Câu lệnh continue sẽ bỏ qua lần lặp hiện tại và thực
hiện lần lặp tiếp theo
{0}”,i);
i++;
} while ( i < 10 )return 0;
}}
Trang 16Console.WriteLine(“{0} ”,i);
} else { Console.Write(“{0} ”,i);
}return 0;
Trang 17khi chia hai số nguyên : 17/4 = 4
Chia cho số thực có kiểu như float, double, hay
decimal thì kết quả chia được trả về là một số
thực.
Toán tử chia dư (%) : 17%4 = 1
Trang 18var1 = ++var2; // var1 = 11, var2 = 11
var1 = var2++; //var1 = 10 , var2 = 11
Trang 19Toán tử quan hệ
Toán tử logic
Độ ưu tiên toán tử
Một ngôi
Trang 20Độ ưu tiên toán tử
Nhằm tránh sự xung đột về tên, giúp cho
việc sử dụng các thư viện khác nhau từ các
nhà cung cấp
Giảm bớt độ phức tạp khi sử dụng lại mã
cho ứng dụng khác
C# đưa ra từ khóa using đề khai báo sử
dụng namespace trong chương trình:
Trang 21class WalkMan{ }
}
namespace Sony
{class Television{ }
class Walkman{ }
}class T21inches{
}}
Trang 23public T21inches(){
Console.WriteLine ("A
21 inches Television");
}}}//end of namespace Television
}//end of namespace Sony
T14inches Television = new T14inches();
T21inches Television2 = new T21inches();
Trang 25Ví dụ: Khai báo khác khối
public class Tester { public static int Main() {
Demo1.Example1.Show1();
return 0;
} } } // end Demo2}// end MyLib
Ví dụ: Khai báo khác khối
Lớp Example2 có cùng namespace MyLib.Demo1 với lớp
Example1 nhưng hai khai báo không cùng một khối
Xử lý ngoại lệ (exception handling)
Đọc một file trên đĩa, nhưng file đã bị xóa
Chia cho số 0
trước được các tình huống có thẻ gây
ra bởi 1 lỗi nào đó
và bắt các lỗi có thể xảy ra trong một
chương trình
Trang 26Phát sinh và bắt giữ ngoại lệ
đối tượng ngoại lệ
Kiểu dữ liệu là System.Exception, hay những
đối tượng được dẫn xuất từ kiểu dữ liệu này.
throw new System.Exception();
throw new IOException();
Phát sinh và bắt giữ ngoại lệ (tt)
Khi gặp ngoại lệ, thì sẽ làm ngừng việc thực
thi câu lệnh tiếp theo, CLR sẽ tìm kiếm một
trình xử lý ngoại lệ
Nếu trình xử lý ngoại lệ không được tìm thấy
trong phương thức hiện thời, thì CLR tiếp tục
tìm trong phương thức gọi cho đến khi nào tìm
thấy.
Nếu CLR trả về lớp Main() mà không tìm thấy
bất cứ trình xử lý ngoại lệ nào, thì nó sẽ kết
thúc chương trình.
Trang 27Sử dụng khối try … catch
Có thể có nhiều khối catch
Khối Finally có thể có hoặc không
Khối finally luôn được thực hiện dù có lỗi xảy hay không
Ví dụ
Khối try … catch
Bắt đầu thực hiện câu lệnh trong khối try
Nếu không có lỗi xuất hiện, việc thực thi tiến
hành cho đến cuối khối try, chuyển đến khối
finally
Nếu có một lỗi xuất hiện trong khối try, thực
thi sẽ nhảy đến một trong các khối catch
Vào cuối của khối catch , việc thực thi được
chuyển khối finally
Khối finally được thực thi (có thể có hoặc
không)
Trang 28userInput = Convert.ToInt32 (Console.ReadLine());
quotient = divident /userInput;
Console.WriteLine("The Integer Quotient
of 50 divided by {0} is {1}", userInput, quotient);
}
}
}
}
Trang 29Ví dụ
các ngoại lệ
Kiểu giá trị và kiểu tham chiếu
bản
- int, char and structures
- classes, interfaces, arrays and strings
Kiểu giá trị và kiểu tham chiếu
Lưu một giá trị trong trong bộ nhớ
Trang 31Lưu ý
thừa từ kiểu object, định nghĩa trong
namespace system
Convert Class
Ví dụ: sử dụng lớp Convert
Trang 32Thank you all for your attention and patient !