Nó cung cấp các phương thức để thực hiện các chức năng khác nhau như tạo mảng, tìm kiếm, copy và sắp xếp mảng Các thuộc tính của lớp Array: • Length: số phần tử của mảng kiểu int32 • Lon
Trang 1Các đặc trưng chính của C# Basic Features of C#
• Được phát triển bởi MS đạt chuẩn ECMA(European Computer
Manufacturers Association)
• Là n.ngữ HĐT,hướng sự kiện, trực quan
• Dựa theo ý tưởng của các ngôn ngữ C, C++, Java, VB
• Hỗ trợ đầy đủ bởi net framework
• Là ngôn ngữ đơn giản(hạn chế con trỏ, không có cslớp ảo, đa thừa kế), hiệu quả, module hóa, mạnh và sẽ là ngôn ngữ phổ dụng
Viết và chạy một ứng dụng đầu tiên trên console
1 Tạo 1 project mới
Nếu dùng IDE thì ấn F6 để dịch chương trình
3 Chạy chương trình run program
Nếu dùng command line thì gõ tên tệp chạy exe
Nếu dùng IDE, ấn Ctrl + F5
Trang 2Một số khái niệm cơ bản trong C#
1 Kiểu dữ liệu Data Types
Kiểu dữ liệu của C# đc chia thành 2 loại:
a Giá trị Value :
i Có thể là kiểu chuẩn hoặc kiểu dữ liệu do người dùng định nghĩa
ii Kiểu giá trị chứa trong stack cho kết quả nhanh hơn
b Kiểu tham chiếu Reference types:
i Biến tham chiếu được lưu trữ trong heap
ii Tất cả cách kiểu dữ liệu người dùng tự định nghĩa chẳng hạn nhưkiểu lớp thì đều là kiểu tham chiếu
Kiểu dữ liệu chuẩn:
Mỗi một kiểu dữ liệu thì đều liên quan đến tập giá trị mà nó chứa và các phép toán trên kiểu đó
Cần lựa chọn kiểu để lưu trữ cho phù hợp với mục đích sử dụng
Kiểu tham chiếu:
Trang 32 Từ khóa
3 Nhập xuất
Xuất : Console.Write() và Console.WriteLine()
2 phương thức này có thể chứa tham số là các ký tự định dạng dữ liệu hiển thị
a Console.Write(“Customer name: {0}”, custName);
b Console.WriteLine(“Total amount: ${0:#,###.#0}”, totalAmount);
Nhập: Console.Read() and Console.ReadLine()
custName = Console.ReadLine();
4 Chuyển đổi dữ liệu
Phương thức ReadLine() có thể được sử dụng để nhập các giá trị trừ giá trị nguyên
Dữ liệu nhập là chuôi và được chuyển đổi thành kiểu dữ liệu khác bởi lớp Convert
Trang 4Ví dụ:
-DateTime today = DateTime.Now;
-Console.WriteLine("short date: {0:d} ", today);
-Console.WriteLine("long date: {0:D} ",today);
-Console.WriteLine("full date with time: {0:f} ",today);
-Console.WriteLine("fulll date with time with second: {0:F} ",today);
Lệnh Checked and Unchecked
Kiểm tra một biểu thức toán học có bị tràn hay không
6 Chuyển đổi kiểu
Kiểu chứa giá trị lớn hơn có thể gán cho kiểu chứa giá trị nhỏ hơn Ngược lại có thể dùng lệnh ép kiểu
Có thể dùng lớp Convert: tostring, toint32,
a (kiểu) biến;
Trang 5Ví dụ:
int i = 56;
float f = 3.14159f;
f = i; //ep kieu ngam dinh (khong tuong minh) implicit
i = (int)f;//se bi loi neu ban viet int(f) ep kieu tuong minh
7 Boxing và Unboxing
- Sử dụng Boxing và Unboxing để chuyển đổi bất cứ 1 kiểu giá trị nào sang kiểu tham chiếu hay kiểu tương đương
- Khi 1 giá trị được boxing thì giá trị đó sẽ được copy sang 1 một đối tượng
- Đối tượng mới được lưu trữ trong heap
Lớp Array là lớp cơ sở của C# danh cho tất cả các loại mảng
Nó cung cấp các phương thức để thực hiện các chức năng khác nhau như tạo mảng, tìm kiếm, copy và sắp xếp mảng
Các thuộc tính của lớp Array:
• Length: số phần tử của mảng kiểu int32
• LongLength:int64
• Rank: là một số nguyên chứa số chiều trong mảng
• IsReadOnly, IsFixedSize
Trang 6Các phương thức của lớp Array:
• Clear: xóa các phần tử của mảng, đặt kích thước của mảng là 0.
• GetLength, Initialize, SetValue, GetValue, Sort, Copyto,…
Nhap, Xuat, ToiGian,Cong, Tru,…
10 Đối tượng
Là một thể hiện của lớp
½ là một thể hiện của lớp phân số
1 đối tượng có
- Thuộc tính: Đặc điểm mô tả đối tượng
- Phương thức: Mô tả một hành động khi được yêu cầu sẽ tiến hành như thế nào
Trang 711 Lớp và đối tượng
- Lớp để định nghĩa một thực thể, còn đối tượng là một thể hiện của thực thể
- Lớp là 1 khái niệm mà chỉ ra tất cả các đặc điểm và hành động của một đốitượng, còn đối tượng là một cái có thật
- Tất cả đối tượng thuộc về 1 lớp có cùng đặc điểm và hành động
- Lớp kiểu dữ liệu mà 1 đối tượng nào đó thuộc vào
12 Các chức năng chính của OOP(lập trình hướng đối tượng)
Tính trừu tượng (abstraction): Đây là khả năng của chương trình bỏ qua
hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết Mỗi đối tượng phục vụ như là một "động tử" có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được
các thao tác Tính chất này thường được gọi là sự trừu tượng của dữ liệu.
Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một
số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi
hành Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp
trừu tượng hay lớp cơ sở trừu tượng.
Tính đóng gói (encapsulation) và che giấu thông tin (information hiding):
Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của một đối tượng Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó Việc cho phép môi trường bên ngoài tácđộng lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã Đây là tính chất đảm bảo sự toàn vẹn của đối tượng
Tính đa hình (polymorphism): Thể hiện thông qua việc gửi các thông điệp
(message) Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm
bên trong của một đối tượng Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ
Trang 8tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không bị nhầm lẫn.
Thí dụ khi định nghĩa hai đối tượng "hinh_vuong" và "hinh_tron" thì có một phương thức chung là "chu_vi" Khi gọi phương thức này thì nếu đối tượng
là "hinh_vuong" nó sẽ tính theo công thức khác với khi đối tượng là
"hinh_tron"
Tính kế thừa (inheritance): Đặc tính này cho phép một đối tượng có thể có
sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này
- Là một loại phương thức đặc biệt của lớp
- Được gọi mỗi khi 1 đối tượng mới được tạo ra
- Nó đc dùng để khởi tạo đối tượng
Trang 9- Trong phương thức tĩnh ta không được phép truy cập trực tiếp đến các thành viên k tĩnh.
15 Hàm tạo tĩnh
- Nó được dùng để khởi tạo cho các biến của lớp, nó được thực hiện duy nhất 1 lần và thực hiện trước nhất ngay khi chạy chương trình.
- Hàm tạo tĩnh là hàm tạo không có tham số.
- Dùng nó khi mà 1 số công việc chỉ thực hiện duy nhất 1 lần và không thể làm trong hàm tạo.
Trang 10Lớp dẫn xuất được thừa kế những gì?
• All trừ thành phần tĩnh, hàm tạo, hàm hủy, phương thức toán tử gán
• Ở lớp dx được gọi hàm tạo của lớp cơ sở để khởi gán các thuộc tính của lớp
Trang 11Khi khai báo 1 lơp A là sealed thì khai báo
Class B:A là bị lỗi
Từ khóa virtual
• virtual để định nghĩa một phương thức hỗ trợ cho tương ứng bội
• Nó được dùng để định nghĩa lại một phương thức trong lớp
• Virtual không dùng với static và đi luôn đi kèm với override
• Khai báo phương thức ảo
[access modifier] virtual [return-type] name( [parameters-list] )
{
//virtual method implementation
}
Ví dụ:
Trang 14public Time(int hours, int minutes)
{
this.hours = hours;
this.minutes = minutes;
} public new Time operator + ( Time second){
return new Time(hours + second.hours, minutes + second.minutes);
} }
17 Lớp cơ sở trừu tượng
- Là lớp mà các lớp khác có thể được dẫn xuất từ chúng
- Lớp cơ sở trừu tượng không được vó thể hiện
- C# cho phép tạo lớp cơ sở trừu tượgn bằng cách thêm từ khóa abstract vào định nghĩa lớp
- 1 phương thức trừu tượng đc dn trong lớp cơ sở trừu tượng và việc thực thi
public abstract void MethodA();
public void MethodB()
{
Trang 15Console.WriteLine ("This is the non abstract method”); }
- 1 interface là một lớp cơ sở hoàn toàn trừu tượng
- Nó chỉ chứa các phương thức ảo, không có phương thức thực thi
- Một thể hiện của một giao diện phải thực thi các thành phần được liệt kê trong interface
Trang 16Xung đột trong giao diện( interface)
• Xảy ra khi 2 interface đặt cùng tên 1 phương thức nào đấy
public interface IFile
Trang 17//(apart from that of IFile & IFileTwo)
}
19 Sự khác nhau giữa lớp trừu tượng và giao diện
- Một lớp trừu tượng thì không có thể hiện nghĩa là ta không thể khởi tạo
nó bằng toán tử new, và một phương thức trong nó là abstract thì chỉ được đưa ra định nghĩa (khai báo) mà không được thực thi và nó sẽ được
overriden lại trong các lớp con kế thừa Và trong lớp mà tồn tại phương
thức abstract thì lớp đó cũng được định nghĩa abstract.
- Đối với giao diện thì khác hoàn toàn với lớp trừu tượng, nó định nghĩa
một cách cứng nhắc các phương thức và thuộc tính trong chúng nghĩa là không cho phép ta thực thi bất kỳ một đoạn mã nào Và tất cả các thành viên trong nó đều được định nghĩa công khai (public) Một cách tổng quan
về giao diện: Giao diện là ràng buộc, giao ước đảm bảo cho các lớp hay các cấu trúc sẽ thực hiện một điều gì đó Khi một lớp thực thi một giao diện, thì lớp này báo cho các thành phần client biết rằng lớp này có hỗ trợ các phương thức, thuộc tính, sự kiện và các chỉ mục khai báo trong giao diện
- Một class chỉ có thể kế thừa từ một abstract class, nhưng có thể kế thừa nhiều interface
- Trong Interface chỉ có thể khai báo các fields, methods, mà không được hiện thực nó Còn đối với abstract thì dùng các biến, hiện thực cách
- Abstract class có tốc độ thực thi nhanh hơn interface
- Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không
Trang 18• Get được dùng để đọc giá trị
• Set được dùng để thiết đặt giá trị
•
Property chỉ đọc:
Property chỉ ghi:
Trang 19Property đọc và ghi:
Tác dụng của Property
• Thay đổi private field
• Đọc private field
• Thực hiện việc đóng gói dữ liệu
• Thực thi việc trừu tượng hóa
21 So sánh Properties và Fields
- Là dữ liệu thành phần mà nó có thể
thiết đặt hoặc truy xuất dữ liệu
- Không dùng với ref và out vì không
- Có thể dùng với ref và out
- Đoạn mã sau tạo ra một trường có tên là
calcAmount
- Private int calcAmount;
Trang 20Property Method
Thể hiện đặc trưng của đối tượng
Không có tham sô
Có thể overridden nhưng không thể
- Giúp cho việc truy xuất dữ liệu của đối tượng được nhanh hơn
Cú pháp khai báo index:
24 Parameters
- Indexers phải có ít nhất một parameter
- The parameter chỉ thứ tự Vị trí, việc sử dụng vị trí của index mà dữ liệu được lưu trữ là vị trí mà ta thiết đặt hay truy xuất giá trị
- Index có thể có nhiều tham số như mảng nhiều chiều
25 Lập trình cơ sở dữ liệu:
25.1: Đặc điểm của ADO.NET
Trang 21 Thiết kế hoàn toàn dựa vào XML.
Thiết kế hoàn toàn hướng đối tượng
Dữ liệu được đưa vào bộ nhớ dưới dạng DataSet (tương đương với 1
DataBase)
Duyệt dữ liệu 1 cách tự do, ngẫu nhiên truy cập thẳng vào bảng, dòng, cột mong muốn
Trao đổi dữ liệu qua internet rất dễ dàng
Tương tác với hầu hết các loại CSDL: MS SQL server, MySQL, Access, Excel, …
Hỗ trợ mô hình kết nối không thường xuyên (Ngắt kết nối - disconnected)
Một tập con của dữ liệu trung tâm được sao chép và bổ sung độc lập (sử dụng DataSet), sau đó sẽ được cập nhật lại vào dữ liệu trung tâm
25.2 Kiến trúc của ADO.NET
Kiến trúc của ADO.NET gồm 2 phần chính:
Phần kết nối: bao gồm các NET Framework data Providers sử dụng khi kết
nối CSDL và thao tác dữ liệu, phải thực hiện kết nối khi thao tác
Connection: quản lý việc đóng mở DB
???Connection: SqlConnection, OleDbConnection
Command: lệnh truy vấn, tương tác dữ liệu khi đang lập kết nối
???Command: SqlCommand, OleDbCommand
DataReader: bộ đọc dùng để đọc nhanh dữ liệu theo 1 chiều
???DataReader: SqlDataReader, OleDbDataReader
DataAdapter: cầu nối giữa DB và DataSet
Phần ngắt kết nối: là DataSet
DataSet không quan tâm đến DB thuộc kiểu gì, và lấy dữ liệu từ DataAdapter để xử lý
DataSet xem như một DB trong bộ nhớ: bảng, quan hệ…
DataSet có các thành phần con như
Trang 22 System.Data.OleDb à Access, SQL Server, Oracle
System.Data.SqlClient à SQL Server
System.Data.OracleClient à Oracle
Đặc điểm:
Cả ba thư viện trên về giao tiếp lập trình là giống nhau
Dùng thư viện SqlClient truy xuất SQL Server nhanh hơn OleDb
Tương tự cho OracleClient
25.4 Thao tác với CSDL SQL server
Để thao tác với CSDL SQL server ta dùng sql Data provider
Khi làm việc với CSDL SQL server ta chú ý 2 trường hợp:
Câu lệnh SQL là câu Select
Câu lệnh SQL là các câu như Update, Delete, insert
A, Câu lệnh SQL là câu Select
Ta xét Ví dụ: Tạo 1 form giao diện chỉ có 1 DataGridView để hiển thị dữ liệu của bảng tblChatLieu trong CSDL vừa tạo
Trang 23 B ước 1 : Tham chiếu đến Namespace System.Data (Thông thường với ứng dụng windown Form thì Namespace này mặc định đã có) Nếu chưa có ta làm như sau:
Kích chuột phải vào tên dự án, rồi chọn Add Reference cửa sổ sau xuất hiện hình sau: (Chọn như hình vẽ rồi nhấn OK)
Sau khi thêm một quy chiếu vào assembly, ta thêm vào các Namespace sau:
using System.Data;
using System.Data.SqlClient;
Bước 2 : Khai báo chuỗi kết nối
string conectString = " Data Source= serverName; Initial
Catalog=dataBaseName; User ID=UserName;Password=password;";
Chú ý: Nếu ta dùng quyền đăng nhập vào CSDL là quyền đăng nhập vào windows thì ta không cần 2 thuộc tính chỉ user ID và Password
Ta thêm thuộc tính Integrated Security=True;
Bước 3 : Khai báo câu lệnh SQL
string sqlString=“select * from tableName”;
Bước 4 : Thiết lập 1 connection (SqlConnection)
SqlConnection objConnect = new SqlConnection(conectString);
Bước 5 : Cho mở kết nối
if (objConnect.State != ConnectionState.Open)
objConnect.Open();
Bước 6 : Tạo đối tượng DataAdapter
SqlDataAdapter dad = new SqlDataAdapter(sqlString,objConnect);
Bước 7 : Tạo đối tượng DataSet để điền dữ liệu
Trang 24DataSet dts = new DataSet();
B, Câu lệnh SQL là các câu như Update, Delete, insert
Bước 1, 2, 3, 4, 5: Làm tương tự như trên
Bước 6: Ta dùng đối tượng SqlCommand như sau
SqlCommand objCommand = new SqlCommand();
25.5 viết mã lệnh cho form chính
Form chính có các nhiệm vụ sau:
Trang 25 Tạo biểu tượng Icon cho form (Chuẩn bị một file ảnh muốn làm biểu
tượng ví dụ Book.ico lưu vào thư mục /BanHang/Images)
Mở các form tương ứng với các mục menu
Tạo biểu tượng Ta viết code cho sự kiện Load như sau:
private void frmMain_Load(object sender, EventArgs e)
Mở các form tương ứng với các mục menu
Giả sử khi ta chọn menu mnuChatLieu (Chất liệu) thì mở ra form tương ứng
là form chất liệu (frmChatLieu) ta viết code cho sự kiện click của
mnuChatLieu như sau:
private void mnuChatLieu_Click(object sender, EventArgs e)
Phương thức Show() # ShowDialog()
frmChatLieu nằm trong thư mục /BanHang/Forms/