9/12/2018
Lập trình Ứng dụng quản lý
.NET Framework và ngơn ngữ lập trình
C#
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
1
9/12/2018
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
.NET Framework
Microsoft .NET gồm 2 phần chính : Framework
và Integrated Development Environment (IDE).
Framework cung cấp những gì cần thiết và căn
bản.
IDE thì cung cấp một mơi trường giúp chúng ta triển
khai dễ dàng, và nhanh chóng các ứng dụng dựa
trên nền tảng .NET.
Microsoft .NET là nền tảng cho việc xây dựng và
thực thi các ứng dụng phân tán thế hệ kế tiếp.
.NET Framework là một platform (nền tảng) mới
làm đơn giản việc phát triển ứng dụng trong môi
trường phân tán của Internet.
2
9/12/2018
Thành phần
.NET Framework có hai thành phần chính:
Common Language Runtime (CLR) và thư viện
lớp .NET Framework.
CLR thực hiện quản lý bộ nhớ, quản lý thực thi tiểu
trình, thực thi mã nguồn, xác nhận mã nguồn an
toàn, biên dịch và các dịch vụ hệ thống khác.
Những đặc tính trên là nền tảng cơ bản cho những
mã nguồn được quản lý chạy trên CLR.
Thư viện lớp .NET Framework là một tập hợp
những kiểu dữ liệu được dùng lại và được kết hợp
chặt chẽ với Common Language Runtime. Thư
viện lớp là hướng đối tượng cung cấp những kiểu
dữ liệu mà mã nguồn được quản lý của chúng ta có
thể dẫn xuất.
MSIL
Trong .NET Framework, chương trình khơng
được biên dịch vào các tập tin thực thi mà thay
vào đó chúng được biên dịch vào những tập tin
trung gian gọi là Microsoft Intermediate
Language (MSIL).
Những tập tin MSIL được tạo ra từ C# cũng tương
tự như các tập tin MSIL được tạo ra từ những ngôn
ngữ khác của .NET, platform ở đây không cần biết
ngôn ngữ của mã nguồn.
Khi chạy chương trình, thì MSIL được biên dịch
một lần nữa, sử dụng trình biên dịch Just-InTime (JIT). Kết quả là mã máy được thực thi bởi
bộ xử lý của máy.
3
9/12/2018
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
Ngơn ngữ lập trình C#
C# là một ngơn ngữ lập trình mới được thiết kế
riêng để dùng cho Microsoft .NET Framework.
Được xây dựng trên nền tảng của hai ngôn ngữ
mạnh nhất là C++ và Java.
C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn
mười mấy kiểu dữ liệu được xây dựng sẵn. Tuy
nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi
những khái niệm lập trình hiện đại. C# bao gồm tất
cả những hỗ trợ cho cấu trúc, thành phần
component, lập trình hướng đối tượng.
C# là một ngôn ngữ độc lập.
4
9/12/2018
Intermediate Language
Intermediate Language là bản chất của .NET
Framework. Mã C# sẽ ln được dịch sang
Intermediate Language trước khi nó được thực
thi.
Những đặc tính chính của Intermediate Language
Hướng đối tượng và dùng interfaces.
Sự tách biệt giữa kiểu giá trị và kiểu tham chiếu.
Định kiểu mạnh.
Quản lỗi thông qua các ngoại lệ (exception).
Sử dụng các thuộc tính (Attributes).
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
5
9/12/2018
Biến và hằng
Khai báo biến:
[ modifier ] datatype identifer ;
Với modifier là một trong những từ khoá :
public, private, protected, . . . còn datatype là kiểu
dữ liệu (int , long , float. . . ) và identifier là tên
biến.
Khai báo hằng:
const int a = 100 ;
Data types
Kiểu dữ liệu trong C#
C# là ngôn ngữ lập trình định kiểu mạnh.
Bao gồm 2 loại
Được xây dựng sẵn: int, long,...
Tự định nghĩa.
Chia thành 2 kiểu chủ yếu là: kiểu giá trị (value
type, thông thường là struct như: int, char,…) và
kiểu tham chiếu (reference type, thông thường là
class như: string,…).
Kiểu giá trị được lưu trong vùng nhớ Stack.
Kiểu tham chiếu được lưu trong vùng nhớ Heap (giá trị địa
chỉ lưu trong Stack).
6
9/12/2018
Vùng nhớ
Vùng nhớ Stack và Heap
Vùng nhớ Stack là vùng lưu trữ dữ liệu với kích
thước cố định, riêng biệt cho mỗi chương trình. Mọi
dữ liệu được lưu trên Stack sẽ bị loại bỏ ngay khi
hoàn thành phạm vi biến (hồn tất 1 phương thức,
chương trình,…).
Vùng nhớ Heap là vùng lưu trữ dữ liệu có kích
thước thay đổi và khá đồ sộ. Dữ liệu trên Heap
không bị loại bỏ khi biến tham chiếu đến đã hoàn
thành phạm vi biến.
Boxing
Boxing là quá trình chuyển dữ liệu từ kiểu tham
trị sang kiểu tham chiếu. Q trình có thể thực
hiện ngầm định.
7
9/12/2018
Unboxing
Unboxing là quá trình
ngược lại với boxing,
tức là đưa từ kiểu
tham chiếu ra kiểu
tham trị. Quá trình
phải được thực hiện
tường minh (phải đảm
bảo đúng với kiểu dữ
liệu đã boxing).
Cấu trúc chương trình
Trong C# mọi thứ đều bắt đầu từ class.
Class là một khuôn mẫu thiết yếu để tạo ra đối
tượng.
Thành phần dữ liệu: fields, constants và events.
Thành phần xử lý: methods (functions member).
Một phương thức được bổ nghĩa bởi các từ khóa
sau: public, private, protected, internal, static,
abstract, virtual, override, new, sealed,
extern.???
Struct tương tự class tuy nhiên có nhiều khác biệt
cơ bản???
8
9/12/2018
Phương thức
Cách khai báo và sử dụng phương thức (truyền
tham số,...)
[static] [access modifiers] <return type>
MethodName(
params)
{
content code
}
Khai báo phải đi liền với thân hàm
Cấu trúc lệnh
Các cấu trúc lệnh (điều kiện, lặp, switch,...)
Tương tự C++
Lặp duyệt
foreach (var item in collection)
{
content code
}
foreach (DataType element in collection)
{
content code
}
9
9/12/2018
Kiểu liệt kê (enumerations)
enum EnumName
{
enum1,
enum2 = 3,
enum3
}
EnumName e = EnumName.enum2;
switch (e)
{
case EnumName.enum1:
break;
case EnumName.enum2:
break;
case EnumName.enum3:
break;
default:
break;
}
Namespaces
Namespaces cung cấp cách tổ chức quan hệ
giữa các lớp và các kiểu khác.
Hiểu đơn giản là namespace chia không gian
cho từng thư viện.
Sử dụng từ khóa using để khai báo sử dụng
mặc định namespace.
using
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
System.Threading.Tasks;
10
9/12/2018
Delegate
Delegate là kiểu dữ liệu tham chiếu được dùng
để đóng gói một phương thức với tham số và
kiểu trả về xác định.
Gần giống con trỏ hàm trong C++ nhưng là
hướng đối tượng, an toàn và bảo mật.
Khai báo delegate trong namespace hoặc trong
class.
Ví dụ:
public delegate int CompareFunc(object obj1,
object obj2);
Sử dụng delegate
Sử dụng delegate để xác định phương thức lúc
thực thi.
Cơ chế multicasting cho phép gọi hai hay nhiều
phương thức thực thi thông qua một ủy quyền
đơn. Mục đích chính là có một ủy quyền có thể
gọi thực hiện nhiều hơn một phương thức. Để
thực hiện được thì kiểu trả về của delegate phải
là kiểu void.
Ví dụ:
delegate void MulticastDelegate();
var myMulticastDelegate = Writer + Logger;
myMulticastDelegate += Transmitter;
11
9/12/2018
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
String trong .NET
Xử lý chuỗi là công việc cơ bản ln diễn ra trong
lập trình.
Xử lý chuỗi trong .NET được hỗ trợ rất mạnh bởi
các thư viện liên quan
Kiểu dữ liệu string với nhiều phương thức hỗ trợ
StringBuilder giúp xử lý hiệu quả hơn với nhiều
chuỗi trong nhiều tình huống
Regular Expression giúp xử lý chuỗi quy tắc (so
khớp)
12
9/12/2018
Kiểu dữ liệu string
Trong các kiểu dữ liệu tích hợp sẵn của C# thì chỉ
string là kiểu dữ liệu tham chiếu (reference type),
tuy nhiên cách sử dụng lại giống như kiểu dữ liệu
tham trị (value type).
Kiểu dữ liệu string là bất biến (immutable)
(không thể thay đổi sau khi đã được tạo).???
Kiểu dữ liệu string là sealed (không cho phép
dẫn xuất).
Vì vậy string trở nên an tồn và hiệu quả hơn.
Định dạng chuỗi (Formatting Strings)
Phương thức Format giúp định dạng chuỗi kết
quả dễ dàng.
string str = string.Format("{0}+{1}={2}", a,
b, a + b);
...
string strResult = string.Format("Currency:
{0:C}, Hex: ‘{0,2:X}’", 10);
...
strResult = string.Format("Conditional
Currency: {0:$#,###.00;($#,###.00);$0.00}", 123456);
13
9/12/2018
Bảng định dạng tiêu chuẩn
Bảng ký tự tự định dạng
14
9/12/2018
So sánh chuỗi
Comparing Strings
Cơ bản sử dụng các operator ==, >, <,...
Phương thức hỗ trợ so sánh: Compare và
CompareOrdinal.
int rs = string.Compare("abc", "qwe");
rs = string.CompareOrdinal("abc", "qwe");
Checking for String Equality
Sử dụng operator ==
Sử dụng phương thức Equals.
bool bRs = string.Equals(str, str2);
bRs = str.Equals(str2);
Xử lý chuỗi
Concatenating Strings
Sử dụng operator +
Sử dụng phương thức Concat
strResult = str + ", " + str2;
strResult = string.Concat(str, ", ", str2);
Copying Strings
Sử dụng phương thức Copy, CopyTo hoặc
phương thức chung Clone.
Copy khác với phép gán.
strResult = string.Copy(str);
//"qwer\0“
char[] arrC = new char[str.Length];
str.CopyTo(1, arrC, 0, 3);
//'w', 'e', 'r', '\0‘
strResult = new string(arrC);
//"wer\0"
15
9/12/2018
Kiểm tra chuỗi
Inspecting String Content
Sử dụng các phương thức StartsWith và
EndsWith hoặc Contains
bRs = str.StartsWith("a");
bRs = str.EndsWith("g");
bRs = str.Contains("op");
Extracting String Information
Sử dụng các phương thức IndexOf hoặc
LastIndexOf và Substrings.
int idx = str.IndexOf("test");
idx = str.LastIndexOf("test");
strResult = str.Substring(idx);
Padding và Trimming
Padding and Trimming String Output
Sử dụng các phương thức PadLeft, PadRight
Sử dụng phương thức Trim, TrimStart, TrimEnd
strResult = str.PadLeft(10, '$');
strResult = strResult.TrimStart(new char[] { '$'
});
strResult = str.PadRight(15, '@');
strResult = strResult.TrimEnd(new char[] { '$',
'@' });
16
9/12/2018
Sửa đổi chuỗi
Modifying String Content
Các phương thức hỗ trợ: Insert, Remove và
Replace
Ngồi ra cịn có các phương thức đặc biệt như:
ToLower, ToUpper
strResult
strResult
strResult
strResult
=
=
=
=
str.Insert(1, "zxc");
strResult.ToUpper();
str.Replace("we", "zxc");
strResult.Remove(3);
//"qzxcwer“
//"QZXCWER“
//"qzxcr“
//"qzx“
Chia tách và nối chuỗi
Splitting and Joining Strings
Sử dụng phương thức Split và Join
str = "qw ert y";
str2 = "zxc";
string[] arrStr = str.Split(new char[] { ' ' });
//"qw", "ert", "y"
strResult = string.Join(", ", str2, str);
//"zxc, qw ert y“
Working with String Characters
Xử lý như mảng các char với các property
Length, toán tử indexer.
Phương thức hỗ trợ ToCharArray.
17
9/12/2018
Class StringBuilder
Hỗ trợ tạo chuỗi hiệu quả hơn khi phải xử lý từ
nhiều chuỗi con.
Mấu chốt của StringBuilder là không tạo các
bản copy của chuỗi ở mỗi thao tác.
Các phương thức chủ yếu
Append để nối chuỗi.
AppendFormat để nối chuỗi có hỗ trợ định dạng
trước.
EnsureCapacity để xác định kích thước nhỏ nhất
của StringBuilder.
ToString để trích rút string trong StringBuilder.
Regular Expression
Chuỗi biểu thức quy tắc được ứng dụng nhiều
trong việc kiểm tra định dạng chuỗi có phù hợp
u cầu hay khơng.
C#.NET hỗ trợ làm việc với Regular Expression
thông qua class Regex.
string searchString = "1234C";
string regExString = @"\d\d\d\d\d";
Regex rex = new Regex(regExString);
bool isMatch = rex.IsMatch(searchString);
18
9/12/2018
Nội dung
.NET Framework
Ngơn ngữ lập trình C#
Các đặc điểm cơ bản của C#
String trong .NET
Array trong C#
Arrays trong C#
Mảng là thành phần thông dụng trong phần lớn
các ngơn ngữ lập trình.
Một mảng là một kiểu dữ liệu lưu trữ danh sách
(list) các object.
int[] arrInt = new int[10];
arrInt = new int[] { 1, 4, 6, 78 };
char[] arrChar = str.ToArray();
19
9/12/2018
Single-Dimension Arrays
Khai báo mảng
Type[] Array-Identifier [initializer] ;
Duyệt mảng
Sử dụng vịng lặp thơng thường
for (int i = 0; i < arrChar.Length; i++)
{
//...
}
Sử dụng vòng lặp foreach
foreach (var c in arrChar)
{
//...
}
Multidimension Arrays
Khai báo mảng
Type[,,...] Array-Identifier [initializer,...] ;
Điểm khác biệt là có nhiều chiều hơn nhưng mỗi
chiều là đồng nhất về số lượng.
int[,] maInt = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 7 } };
for (int i = 0; i < maInt.Length; i++)
{
//...
}
20