Chương 1: MICROSOFT.NET Mục tiêu: - Trình bày được các thành phần trong C#. - Thực hiện được các thao tác cơ bản trong Visual C# Nội dung chương: I.GIỚI THIỆU NGÔN NGỮ C# Microsoft Visual C# là một ngôn ngữ mạnh mẽ nhưng đơn giản chủ yếu hướng đến các nhà phát triển xây dựng ứng dụng trên nền tảng .NET của Microsoft. C# kế thừa những đặc trưng tốt nhất của ngôn ngữ C++ và Microsoft Visual Basic. Chương trình được biên dịch theo hai bước: − Biên dịch mã nguồn thành IL (Intermediate Language).
− Dùng CLR để biên dịch IL thành mã máy theo từng nền tảng thích hợp.CÁC THÀNH PHẦN QUAN TRỌNG TRONG C# 1. CLR (Common Language Runtime) CLR (Common Language Runtime-CLR) là môi trường thực hiện việc thực thi ứng dụng. IL (Intermediate Language) Mã C# sẽ luôn được dịch sang IL trước khi nó được thực thi. Sau đây là những đặc tính chính của IL: ·Hướng đối tượng và dùng giao tiếp.
·Sự tách biệt giữa kiểu giá trị và kiểu tham chiếu. ·Định nghĩa kiểu mạnh. Sử dụng các thuộc tính. ·Quản lý lỗi thông qua các ngoại lệ.
Thư viện (Assembly) Assembly là một tập tin chứa mã đã được biên dịch sang. Nó có thể chứa trong nhiều tập tin. Các assembly chứa các siêu dữ liệu (metadata) dùng để mô tả các kiểu và phương thức.NET Việc sử dụng các thư viện lớp cơ sở sẵn cho phép thao tác rất nhiều các tác vụ sẵn có trong Windows. Chúng ta có thể tạo các lớp của mình từ các lớp có sẵn thông qua sự kế thừa.
Tạo ứng dụng .NET sử dụng C# Các ứng dụng có thể viết trên C#: ·Ứng dụng ASP. ·Ứng dụng WinForm. ·Các dịch vụ dựa trên Windows.Tạo và lưu project trên console Bước 1: Khởi động Visual Studio 2010 Start | All Programs | Microsoft Visual Studio 2010 | Microsoft Visual Studio 2010 -1- Bước 2: Vào menu File | New | Project Bước 3: Khai báo * Mặc định: Visual Studio 2010 (Visual Studio .NET) sẽ tạo ra tập tin Program.cs chứa một namespace tên ChaoMung và trong namespace này chứa một class tên Program. Bước 4: trong phương thức Main, gõ đoạn mã lệnh sau * Ví dụ: // Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2010 ' System.ReadLine() ; Bước 5: Để chạy chương trình, nhấn F5 -2- 8.Giao diện ứng dụng Cửa sổ project Form Cửa sổ Các điều khiển thuộc tính -3- Chương 2 CĂN BẢN C# Mục tiêu: - Trình bày được các cấu trúc trong C# - Viết được các câu lệnh đơn giản trong C# - Sử dụng các câu lệnh, toán tử, biểu thức, biến và hằng trong C# để viết các chương trình đơn giản.
Nội dung chương: Chương này sẽ thảo luận về hệ thống kiểu dữ liệu, phân biệt giữa kiểu dữ liệu xây dựng sẵn (như int, bool, string…) với kiểu dữ liệu do người dùng định nghĩa (lớp hay cấu trúc do người lập trình tạo ra. Một số cơ bản khác về lập trình như tạo và sử dụng biến dữ liệu hay hằng cũng được đề cập cùng với cấu trúc liệt kê, chuỗi, định danh, biểu thức và cậu lệnh. Hướng dẫn và minh họa việc sử dụng lệnh phân nhánh if, switch, while, do.while, for, và foreach. Và các toán tử như phép gán, phép toán logic, phép toán quan hệ, và toán học.
I-KIỂU DỮ LIỆU 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) mà ngôn ngữ cung cấp cho người lập trình và kiểu được người dùng định nghĩa (user- defined) do người lập trình tạo ra. 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) và kiểu dữ liệu tham chiếu (reference). − Tất cả các kiểu dữ liệu xây dựng sẵn là kiểu dữ liệu giá trị ngoại trừ các đối tượng và chuỗi. − Tất cả các kiểu do người dùng định nghĩa ngoại trừ kiểu cấu trúc đều là kiểu dữ liệu tham chiếu.Kiểu dữ liệu xây dựng sẵn Bảng sau sẽ mô tả một số các kiểu dữ liệu được xây dựng sẵn Kiểu C# Số byte Kiểu .NET Mô tả byte 1 Byte Số nguyên dương không dấu từ 0-255 char 2 Char Ký tự Unicode bool 1 Boolean Giá trị logic true/ false sbyte 1 Sbyte Số nguyên có dấu ( từ -128 đến 127) short 2 Int16 Số nguyên có dấu giá trị từ -32768 đến 32767.
ushort 2 Uịnt16 Số nguyên không dấu 0 – 65.535 int 4 Int32 Số nguyên có dấu –2.647 uint 4 Uint32 Số nguyên không dấu 0 – 4.295 -4- float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ với 7 chữ số có nghĩa. double 8 Double Kiểu dấu chấm động có độ chính xác gấp đôi, giá trị xấp xỉ với 15,16 chữ số có nghĩa. decimal 8 Decimal Có độ 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, kiểu này đòi hỏi phải có hậu tố “m” hay “M” theo sau giá trị. Chọn kiểu dữ liệu − Kiểu float, double, và decimal đưa ra nhiều mức độ khác nhau về kích thước cũng như độ chính xác.Với thao tác trên các số nhỏ thì kiểu float là thích hợp nhất.
Tuy nhiên lưu ý rằng trình biên dịch luôn luôn hiểu bất cứ một số thực nào cũng là một số kiểu double trừ khi chúng ta khai báo rõ ràng. − Để gán một số kiểu float thì số phải có ký tự f theo sau. float x = 24f; − Để gán một số kiểu Decimal thì số phải có ký tự m theo sau. Decimal x = 24m; − 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ự đầu tiên là dấu chéo ‘\’. Ví dụ, \t là dấu tab. Bảng trình bày 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 \0 Ký tự null \a Alert \b Backspace \f Sang trang form feed \n Dòng mới \r Đầu dòng \t Tab ngang \v Tab dọc 3.
Chuyển đổi giữa các kiểu dữ liệu Những đối tượng của một kiểu dữ liệu này có thể được chuyển sang những đối tượng của một kiểu dữ liệu khác một cách tường minh hay ngầm định. Việc chuyển đổi giá trị ngầm định được thực hiện một cách tự động và đảm bảo là không mất thông tin. Ví dụ, chúng ta có thể gán ngầm định một số kiểu short (2 -5- byte) vào một số kiểu int (4 byte) một cách ngầm định. Sau khi gán hoàn toàn không mất dữ liệu vì bất cứ giá trị nào của short cũng thuộc về int short x = 10; int y = x; // chuyển đổi ngầm định Tuy nhiên, nếu chúng ta thực hiện chuyển đổi ngược lại, chắc chắn chúng ta sẽ bị mất thông tin.
Nếu giá trị của số nguyên đó lớn hơn 32.767 thì nó sẽ bị cắt khi chuyển đổi. short x; int y = 100; x = y; // Không biên dịch, lỗi !!! Để không bị lỗi chúng ta phải dùng lệnh gán tường minh, đoạn mã trên được viết lại như sau: short x; int y = 500; x = (short) y; //Ép kiểu tường minh II-BIẾN VÀ HẰNG 1. Biến Một biến là một vùng lưu trữ giá trị với một kiểu dữ liệu. Biến có thể được gán giá trị và cũng có thể thay đổi giá trị khi thực hiện các lệnh trong chương trình.
Để tạo một biến chúng ta phải khai báo kiểu của biến và gán cho biến một tên duy nhất. Biến có thể được khởi tạo giá trị ngay khi được khai báo, hay nó cũng có thể được gán một giá trị mới vào bất cứ lúc nào trong chương trình.1: Khởi tạo và gán giá trị đến một biến. Kết quả: Biến phải được gán giá trị trước khi được sử dụng. v í d ụ : -6- Khi biên dịch đoạn chương trình trên thì trình biên dịch C# sẽ thông báo một lỗi sau: Use of unassigned local variable ….
Hằng − Hằng có giá trị không thay đổi trong suốt chương trình. − Hằng được phân thành ba loại: giá trị hằng (literal), tên hằng (symbolic constants), kiểu liệu kê (enumerations). • Giá trị hằng: ta có một câu lệnh gán như sau: x = 100; //Giá trị 100 là giá trị hằng. • Tên hằng: gán một tên cho một giá trị hằng dùng từ khóa const và cú pháp sau: <const> <kiểu dữ liệu > <tên hằng> = <giá trị>; Ví dụ: const int DoSoi = 100; Một tên hằng phải được khởi tạo khi khai báo, và chỉ khởi tạo duy nhất một lần trong suốt chương trình và không được thay đổi.
Vi dụ: Sử dụng hằng tạo ra hai tên hằng chứa giá trị nguyên: DoSoi và DoDong. Kiểu liệt kê Kiểu liệt kê là tập hợp các tên hằng có giá trị không thay đổi (thường được gọi là danh sách liệt kê). Trong ví dụ trên, có hai hằng có quan hệ với nhau: -7- const int DoDong = 0; const int DoSoi = 100; Do mục đích mở rộng ta mong muốn thêm một số hằng số khác vào danh sách trên, như các hằng sau: const int DoNong = 60; const int DoAm = 40; const int DoNguoi = 20; Các tên hằng trên điều có ý nghĩa quan hệ với nhau, cùng nói về nhiệt độ của nước, khi khai báo từng hằng trên có vẻ cồng kềnh và không được liên kết chặt chẽ cho lắm. Thay vào đó C# cung cấp kiểu liệt kê để giải quyết vấn đề trên: enum NhietDoNuoc { DoDong = 0, DoNguoi = 20, DoAm = 40, DoNong = 60, DoSoi = 100, } Mỗi kiểu liệt kê có một kiểu dữ liệu cơ sở, kiểu dữ liệu có thể là bất cứ kiểu dữ liệu nguyên nào như int, short, long.
Để khai báo một kiểu liệt kê ta thực hiện theo cú pháp sau: enum <tên liệt kê> [:kiểu cơ sở] {danh sách }; • Một kiểu liệt kê bắt đầu với từ khóa enum, tiếp sau là một định danh cho kiểu liệt kê: enum NhietDoNuoc • [kiểu cơ sở] chính là kiểu khai báo cho các hằng trong kiểu liệt kê. • {danh sách }: Mỗi hằng trong kiểu liệt kê tương ứng với một giá trị số, và mỗi hằng phân cách nhau dấu phẩy. Ví dụ: Sử dụng kiểu liệt kê để đơn giản chương trình. -8- − Chú ý: Nếu chúng ta không khởi tạo cho các thành phần này thì chúng sẽ nhận các giá trị tiếp theo với thành phần đầu tiên là 0.
Ta xem thử khai báo sau: enum dayso { ThuNhat, ThuHai, ThuBa = 10, ThuTu } Khi đó giá trị của ThuNhat là 0, giá trị của ThuHai là 1, giá trị của ThuBa là 10 và giá trị của ThuTu là 11. − Kiểu liệt kê bắt buộc phải thực hiện phép chuyển đổi tường minh khi gán cho biến : int x = (int) dayso.