Tài liệu Bài giảng Cơ sở lập trình - Chương 2 Nền tảng ngôn ngữ C#: 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#
String Array ValueType Exception Delegate Class1
Multicast
Delegate
Class2
Class3
Object
Enum1
Structure1Enum
Primitive types
Boolean
Byte
Int16
Int32
Int64
Char
Single
Double
Decimal
DateTime
System-defined types
User-defined types
Delegate1
TimeSpan
Guid
4/10/2012
2
Kiể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 (tt)
C# phân tập hợp ...
32 trang |
Chia sẻ: honghanh66 | Lượt xem: 984 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Cơ sở lập trình - Chương 2 Nền tảng ngôn ngữ C#, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
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#
String Array ValueType Exception Delegate Class1
Multicast
Delegate
Class2
Class3
Object
Enum1
Structure1Enum
Primitive types
Boolean
Byte
Int16
Int32
Int64
Char
Single
Double
Decimal
DateTime
System-defined types
User-defined types
Delegate1
TimeSpan
Guid
4/10/2012
2
Kiể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 (tt)
C# phân tập hợp kiểu dữ liệu này thành
hai loại:
Kiểu dữ liệu giá trị (value type): int, char ,
và structures
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
Kiểu C# Số
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
đến 9.223.372.036.854.775.807
ulong 8 Uint64 Số nguyên không dấu từ 0 đến
18446744073709551615
Kiểu dữ liệu xây dựng sẵn (tt)
Kiểu
C#
Số
Byte
Kiểu
.NET
Mô tả Ví dụ
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.7E-308 -
1.7E+308, với 15,16 chữ số có nghĩa
decimal 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)
Kiểu C# Số
Byte
Kiểu
.NET
Mô tả Ví dụ
bool 1 Boolean Giá trị logic true/ false bool val1 = true;
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
5
Các ký tự đặc biệt
Ký tự Ý nghĩa
\' Dấu nháy đơn
\" Dấu nháy kép
\\ Dấu chéo (Backslash)
\0 Ký tự Null
\a Alert
Các ký tự đặc biệt (tt)
Ký tự Ý nghĩa
\b Backspace
\f Sang trang Form feed
\n Dòng mời (Newline)
\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 !!!
4/10/2012
6
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;
4/10/2012
7
Ví dụ sử dụng kiểu dữ liệu
Khai bao trước khi
sử dụng
Gán giá trị trước
khi sử dụng
public class App
{
public static void Main()
{
int width, height;
width = 2;
height = 4;
int area = width * height;
int x;
int y = x * 2;
...
}
}
Khai báo
Khai báo + khởi đầu
Lỗi
Ví dụ
using System;
class TestDefaultValues
{
static void Main()
{
int number, result;
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,
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#
abstract const extern in operator sbyte throw virtual
as continue false int out sealed true void
base decimal finally interface override set try volatile
bool default fixed internal params short typeof where
break delegate float is partial sizeof uint while
byte do for lock private stackalloc ulong yield
case double foreach long protected static unchecked
catch else get namespace public string unsafe
char enum goto new readonly struct ushort
checked event if null ref switch using
class explicit implicit object return this value
Các từ khóa trong C#
4/10/2012
9
Biến
Biến là nơi lưu dữ liệu của chương trình
Dữ liệu của biến
Nằm trong bộ nhớ vật lý (physical RAM)
Có thể thay đổi giá trị
Phải khai báo trước khi dùng
Đị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:
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;
class VariableDemo
{
public static void Main()
{
string @string;
@string = ”Su dung tu khoa lam ten bien”;
Console.WriteLine (@string);
}
}
Hằng
Hằng là một biến mà giá trị của nó không thể
thay đổi
Phải gán giá trị ngay khi khai báo
Khai báo hằng
= ;
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 );
4/10/2012
11
Câu lệnh (Statements )
Trong C# một chỉ dẫn lập trình đầy đủ được gọi là câu
lệnh.
Chương trình bao gồm nhiều câu lệnh tuần tự với
nhau.
Mỗi câu lệnh phải kết thúc với một dấu chấm phẩy “;”
int x ; // 1 câu lệnh
x = 23 ; // 1 câu lệnh khác
int y = x; // một câu lệnh khác
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
Gọi hàm
Sử dụng từ khóa phân nhánh : goto, break,
continue, return, throw
Phân nhánh có điều kiện
if
switch
Ví dụ: gọi hàm
using System;
using System.Collections.Generic;
using System.Text;
namespace Goiham
{
class Goimotham
{ 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!");
}
}
}
4/10/2012
13
Câu lệnh if
if (biểu thức điều kiện)
{
;
;
............ ;
}
[else
{
;
;
...
} ]
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:
;
break;
case value:
;
break;
default:
;
break;
}
4/10/2012
14
Ví dụ : sử dụng Switch
switch(weekday)
{
case 1:
Console.WriteLine (“You have selected Monday”);
break;
case 2:
Console.WriteLine (“You have selected Tuesday”);
break;
default:
Console.WriteLine (“Sunday is the Default choice!”);
break;
}
Sử dụng lệnh nhảy: goto
Để sử dụng goto
Tạo một nhãn
goto đến nhãn
using System;
public class UsingGoto
{
public static int Main()
{
int i = 0;
lap: // nhãn
Console.WriteLine(“i:{0}”,i);
i++;
if ( i < 10 )
goto lap; // nhãy về nhãn lap
return 0;
}
}
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
{
;
}
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;
}
}
Cấu trúc do while
do
;
while ( điều kiện )
Thực hiện câu lệnh ít nhất 1
lần trong khi điều kiện vẫn
còn đúng
using System;
public class UsingDoWhile
{
public static int Main( )
{
int i = 11;
do
{
Console.WriteLine(“i:
{0}”,i);
i++;
} while ( i < 10 )
return 0;
}
}
4/10/2012
16
Cấu trúc lặp for .
for ([ phần khởi tạo] ; [biểu thức điều kiện];
[bước lặp])
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ư
{
Console.WriteLine(“{0} ”,i);
}
else
{
Console.Write(“{0} ”,i);
}
}
Console.WriteLine(“ Ket qua cuoi cung cua i:{0}”,i);// Sai
return 0;
}
}
4/10/2012
17
Cấu trúc foreach
Cú pháp:
foreach ( <tên truy cập
thành phần > in )
;
Ví dụ : foreach
using System;
public class UsingForeach
{
public static int Main()
{
int[] intArray = {1,2,3,4,5,6,7,8,9,10};
foreach( int item in intArray)
{
Console.Write(“{0} ”, item);
}
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
Độ ưu tiên toán tử
Một ngôi
4/10/2012
20
Độ ưu tiên toán tử
Toán tử ba ngôi
? <Biểu thức thứ
1> :
Ví dụ
maxValue = value1 > value2 ? value1 : value2;
Namespace
Sử dụng namespace
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:
4/10/2012
21
Namespace
Để tạo một namespace dùng cú pháp
sau:
namespace
{
.....
}
Namespace
class SamsungTelevision
{
...
}
class SamsungWalkMan
{
...
}
class SonyTelevision
{
...
}
class SonyWalkMan
{
...
}
namespace Samsung
{
class Television
{...}
class WalkMan
{...}
}
namespace Sony
{
class Television
{...}
class Walkman
{...}
}
Namespace lồng nhau
namespace Sony
{
namespace Television
{
class T14inches
{
...
}
class T21inches
{
...
}
}
}
...
namespace Sony.Television
{
class T14inches
{
...
}
class T21inches
{
...
}
}
...
4/10/2012
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);
}
return 0;
}
}
}
Từ bên ngoài để truy cập
lớp Tester dùng cú pháp
sau: MyLib.Demo.Tester
Ví dụ
namespace Sony
{
class Television
{
...
}
class WalkMan
{
...
Television MyEntertainment = new Television();
...
}
}
4/10/2012
23
Ví dụ (tt)
using Sony;
using Samsung;
using System;
namespace Sony
{
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();
}
}
class Test
{
static void Main()
{
Samsung.Television myEntertainment = new
Samsung.Television();
}
}
Sử dụng namespace
Sử dụng chỉ dẫn namespace
Sử dụng chỉ dẫn namespace
Sony.Television.T14inches Television = new
Sony.Television.T14inches();
...
using Sony.Television;
T14inches Television = new T14inches();
T21inches Television2 = new T21inches();
4/10/2012
24
Xung đột
Error: Vì cả hai namesapce Sony và Samsung
có cùng tên lớp Television
using Sony;
using Samsung;
class Test
{
static void Main()
{
Television MyEntertainment = new Television();
}
}
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 =
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
{
namespace Demo1
{
class Example1
{
public static void Show1()
{
Console.WriteLine(“Lop
Example1”);
}
}
} // end Demo1
namespace Demo2
{
public class Tester
{
public static int Main()
{
Demo1.Example1.Show1();
Demo1.Example2.Show2();
return 0;
}
}
} // end Demo2
} // end MyLib
Ví dụ: Khai báo khác khối
namespace MyLib.Demo1
{
class Example2
{
public static void Show2()
{
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
4/10/2012
26
Xử lý ngoại lệ (tt)
.Net framwork
cung cấp các
lớp ngoại lệ có
thể lưu giữ
thông tin đối với
các ngoại lệ
Phát sinh và bắt giữ ngoại lệ
Trong C#, có thể phát sinh (throw) những
đố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.
Câu lệnh throw :
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.
4/10/2012
27
Sử dụng khối try catch
try
{
;
}
catch
{
;
}
finally
{
;
}
Trạng thái lỗi được xử lí
trong khối 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)
4/10/2012
28
Ví trụ: try catch
using System;
class ExceptionDemo
{
static void Main()
{
int dividend = 50;
int userInput = 0;
int quotient = 0;
Console.WriteLine ("Enter a number : ");
try
{
userInput = Convert.ToInt32 (Console.ReadLine());
quotient = divident /userInput;
}
Ví trụ: try catch
catch (System.FormatException excepE)
{
Console.WriteLine (excepE);
}
catch (System.DivideByZeroException excepE)
{
Console.WriteLine ("catch block");
Console.WriteLine (excepE);
Console.WriteLine("");
}
Ví trụ: try catch
finally
{
Console.WriteLine ("finally block");
if (quotient != 0)
{
Console.WriteLine("The Integer Quotient
of 50 divided by {0} is {1}", userInput, quotient);
}
}
}
}
4/10/2012
29
Ví dụ
Một khối catch có thể bắt giữ được tất cả
các ngoại lệ
Kiểu giá trị và kiểu tham chiếu
C# chia các kiểu dữ liệu vào hai loại cơ
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ớ
Trên stack
Chứa địa chỉa của đối tượng
trong Heap
= null có nghĩa là không có đối
tượng nào tham chiếu
4/10/2012
30
Ví dụ kiểu giá trị
Output:
Ví dụ kiểu tham chiếu
Output
So sánh kiểu giá trị và kiểu tham chiếu
Value Reference
Biến lưu trữ Giá trị thực sự Tham chiếu
Vị trí Stack Heap
Giá trị mặc định 0 Null
Tham số cho
phương thức
Copy giá trị Copy tham
chiếu
4/10/2012
31
Lưu ý
Tất cả các kiểu dữ liệu trong C# đều kế
thừa từ kiểu object, định nghĩa trong
namespace system
Convert Class
Ví dụ: sử dụng lớp Convert
4/10/2012
32
Q&A
Thank you all for your attention and patient !
Các file đính kèm theo tài liệu này:
- chapter_2_5722.pdf