Tải bản đầy đủ (.pdf) (32 trang)

Bài giảng Kỹ thuật lập trình: Chương 2 - ThS. Phạm Thanh An

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 (976.02 KB, 32 trang )

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


Char
Single
Double
Decimal
DateTime
System-defined types
User-defined types
De legate1
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:
 <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;

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> <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 );
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)
{
<lệnh 1> ;
<lệnh 2> ;

;
}
[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

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 <đ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;

}
}
Cấu trúc do … while
do
<Câu lệnh> ;
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])
<Câu lệnh thực hiện>

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 ( <kiểu tập hợp> <tên truy cập
thành phần > in < tên tập hợp>)
<Các câu lệnh thực hiện> ;
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 điều kiện > ? <Biểu thức thứ
1> : <Biểu thức thứ 2>
 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 <Tên namespace>
{
< Định nghĩa lớp A>
< Định nghĩa lớp B >

}

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 <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
{

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

×