4/10/2012
1
Chươ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
Kiểu dữ liệu cơ bản.
Biến và hằng.
Biểu thức.
Câu lệnh.
Toán tử.
Namespace.
Các chỉ dẫn biên dịch.
Xử lý ngoại lệ.
Mô tả kiểu dữ liệu trong C#
St ring Ar ray Va lueType Ex ception De legate Cl ass1
Mu lticast
De legate
Cl ass2
Cl ass3
Ob ject
En um1
St ructure1En um
Pr imitive types
Boolean
Byte
Int16
Int32
Int64
Byte
Kiểu
.NET
Mô tả Ví dụ
object Kiểu dữ liệu cơ sở cho tất cả các kiểu
dữ liệu khác.
object o = null;
string Lưu trữ giá trị chuỗi string s =
“hello”;
short 2 Int16 Số nguyên có dấu giá trị từ -32768
đến
32767.
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
4/10/2012
3
Kiểu dữ liệu xây dựng sẵn (tt)
Kiểu C# Số
Byte
Kiểu
.NET
Mô tả Ví dụ
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
bool val2 = false;
char 2 Char Ký tự Unicdoe char val = 'h';
4/10/2012
4
Kiể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ụ,
\t là dấu tab
Giá trị mặc định của kiểu dữ liệu
Kiểu Giá trị mặc định
Numeric (int,float,short) 0 hoặc 0.0
Bool false
Char ‘\0’
Enum 0
String null
Kiểu tham chiếu null
4/10/2012
Chuyể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
Để chuyển đổi một ký tự sang mã ASCII
(int)'A‘
Để chuyển một số sang ký tự ta thực
hiện như sau:
(char)65
Chuyển đổi ngầm định
From To
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
float double
char ushort, int, uint, long, ulong, float, double, decimal
Chuyển đổi tường mình
Do lập trình viên chỉ định
Xảy ra khi
É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
double x = 74.86;
int i = (int))x; // i = 74
string s = "Hello";
object o = s;
string s2 = (string)o;
number=5;
result=100 * number;
Console.WriteLine (“Result is {0} when 100
is multiplied by number {1}”, result, number);
}
}
Ví dụ: chuyển đổi kiểu dữ liệu
int i = 5;
double d = 3.2;
string s = "496";
d = i;
i = (int) d;
i = System.Convert.ToInt32(s);
Chuyển đổi ngầm định
Chuyển đổi tường minh
Chuyển đổi tường minh
4/10/2012
8
Input / 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,
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ụ
4/10/2012
10
Ví dụ: về khai báo biến
using System;
using System.Collections.Generic;
using System.Text;
namespace InitializingVariables
{ class Values
{ static void Main( )
{
int myInt = 7;
System.Console.WriteLine(“Khởi đâu, myInt: {0}", myInt);
myInt = 5;
System.Console.WriteLine(“Sau khi gán, myInt: {0}", myInt);
}
}
}
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
using System;
Những câu lệnh này sẽ được xử lý theo thứ tự.
Biểu thức
Câu lệnh thực hiện việc đánh giá một giá trị
gọi là biểu thức.
Một phép gán một giá trị cho một biến cũng là một
biểu thức:
var1 = 24;
a = b = c = d = 24;
Khoảng trắng
Trong C#, những khoảng trắng, tab và các
dòng được xem như là khoảng trắng
(whitespace),
C# sẽ bỏ qua tất cả các khoảng trắng đó, do
vậy chúng ta có thể viết như sau:
var1 = 24;
hay
var1 = 24 ;
int x = 5; Giống như:
int x=5; Khác với:
intx=5;
4/10/2012
12
Chú thích trong C#
C# sử dụng kiểu chú thích của C++
// chú thích 1 dòng
/* các dòng chú thích
…………………………………….
…………………………………… */
Phân nhánh
Phân nhánh không có điều kiện
;
}
[else
{
<lệnh 1> ;
<lệnh 2> ;
} ]
Nhóm câu lệnh trong [….] có thể có hoặc không
Ví dụ if
string str = ”hello”;
if (str) // Lỗi
System.Console.WriteLine (“Giá trị là True”);
if (str == “hello”)
System.Console.WriteLine (“Giá trị là đúng”);
Câu lệnh Switch
switch(variable)
{
case value:
<câu lệnh> ;
break;
case value:
<câu lệnh> ;
break;
default:
<câu lệnh> ;
break;
}
4/10/2012
14
}
Cấu trúc lệnh lặp
while Loop
do Loop
for Loop
foreach Loop
4/10/2012
15
Cấu trúc while
while <điều kiện>
{
<câu lệnh> ;
}
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
Ví dụ: while
using System;
public class UsingWhile
{
public static int Main()
{
int i = 0;
while ( i < 10 )
{
Console.WriteLine(“ i: {0} ”,i);
i++;
}
return 0;
Ví dụ: sử dụng for
using System;
public class UsingFor
{
public static int Main()
{
for (int i = 0; i < 30; i++)
{
if (i %10 ==0) // phân dư
{
Console.WriteLine(“{0} ”,i);
}
else
{
Console.Write(“{0} ”,i);
}
}
return 0;
}
}
Phạm vi của biến
khai báo trong vòng lặp for
using System;
public class UsingFor
{
public static int Main()
{
for (int i = 0; i < 30; i++)
{
if (i %10 ==0) // phân dư
return 0;
}
Toán tử
Toán tử gán (=)
Toán tử toán học
Toán tử số học đơn giản (+, -, *, /):
Lưu ý
khi 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
4/10/2012
18
Toán tử
Toán tử tăng giảm
Luong = Luong * 2;
Luong = Luong – 100.000;
C# cung cấp các phép toán tự gán
Toán tử
Toán tử
Toán tử : ++ ,
Toán tử tăng giảm tiền tố và tăng giảm
hậu tố, var2 =10
var1 = ++var2; // var1 = 11, var2 = 11
var1 = var2++; //var1 = 10 , var2 = 11
4/10/2012
19
Toán tử quan hệ
Toán tử logic
Namespace
class SamsungTelevision
{
}
class SamsungWalkMan
{
}
class SonyTelevision
{
}
class SonyWalkMan
{
}
namespace Samsung
{
class Television
{ }
class WalkMan
{ }
}
namespace Sony
{
class Television
{ }
class Walkman
{ }
22
Ví dụ : namespace
namespace MyLib
{
using System;
public class Tester
{
public static int Main()
{
for (int i =0; i < 10; i++)
{
Console.WriteLine( “i: {0}”, i);
}
return 0;
}
}
}
Ví dụ : namespace lồng nhau
namespace MyLib
{
namespace Demo
{
using System;
public class Tester
{
public static int Main()
{
for (int i =0; i < 10; i++)
{
Console.WriteLine( “i: {0}”, i);
namespace Television
{
class T14inches
{
public
T14inches()
{
Console.WriteLine ("A
14 inches Television");
}
}
class T21inches
{
public T21inches()
{
Console.WriteLine ("A
21 inches Television");
}
}
}//end of namespace Television
}//end of namespace Sony
Ví dụ (tt)
namespace Samsung
{
class Television
{
Sony.Television.T14inches myEntertainment = new
Sony.Television.T14inches();
}
}
}
Ví dụ (tt)
using Sony;
using Samsung;
class Test
{
static void Main()
{
Samsung.Television MyEntertainment = new
Samsung.Television();
}
}
Phải sử dụng cả namespace
using <BÍDANH> = <đường dẫn đầy đủ đến namespace hay lớp>
Sử dụng bí danh (alias)
Sử dụng bí danh:
using T21inches = Sony.Televisions.T21inches;
class Test
{
static void Main()
{
T21inches M = new T21inches();
}
}
4/10/2012
25
Ví dụ: Khai báo khác khối
using System;
namespace MyLib
{
{
Console.WriteLine(“Lop Example2”);
}
}
}
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)
Một chương trình sẽ như thế nào ?
Đọc một file trên đĩa, nhưng file đã bị xóa
Chia cho số 0
Trong lập trình, chương trình phải lường
trước được các tình huống có thẻ gây
ra bởi 1 lỗi nào đó.
Các ngoại lệ được sử dụng để đón trước
và bắt các lỗi có thể xảy ra trong một
chương trình