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

Tài liệu Lập trình C tiếng Việt

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 (1.82 MB, 212 trang )

Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 1

Mục lục
Học C# cơ bản và nâng cao 8
Đối với độc giả 8
Điều kiện tiền đề 8
Tổng quan về C# 8
Các đặc điểm lập trình mạnh mẽ của C# 9
Cài đặt môi trường C# 9
Giới thiệu .Net Framework 10
Integrated Development Environment (IDE) cho C# 10
Viết chương trình C# trên Linux hoặc Mac OS 11
Cấu trúc chương trình C# 11
Tạo chương trình Hello World trong C# 11
Biên dịch và thực thi chương trình C# 13
Cú pháp C# cơ bản 14
Từ khóa using trong C# 16
Từ khóa class trong C# 16
Comments trong C# 16
Biến thành viên trong C# 16
Hàm thành viên trong C# 16
Thuyết minh một Class trong C# 16
Định danh (Identifier) trong C# 17
Từ khóa trong C# 17
Kiểu dữ liệu trong C# 18
Kiểu giá trị trong C# 19
Kiểu tham chiếu trong C# 21
Kiểu object trong C# 21
Kiểu Dynamic trong C# 21


Kiểu string trong C# 22
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 2

Kiểu con trỏ trong C# 22
Chuyển đổi kiểu trong C# 22
Phương thức chuyển đổi kiểu trong C# 23
Biến trong C# 26
Định nghĩa biến trong C# 27
Khởi tạo biến trong C# 27
Nhận giá trị từ người dùng trong C# 29
Biểu thức lvalue và rvalue trong C# 29
Hằng (Constant/Literal) trong C# 29
Hằng số nguyên trong C# 30
Hằng số thực trong C# 31
Hằng ký tự trong C# 31
Hằng chuỗi trong C# 33
Định nghĩa hằng trong C# 33
Toán tử trong C# 34
Toán tử số học trong C# 34
Toán tử quan hệ trong C# 35
Toán tử logic trong C# 36
Toán tử so sánh bit trong C# 37
Toán tử gán trong C# 40
Các toán tử hỗn hợp trong C# 42
Thứ tự ưu tiên toán tử trong C# 43
Điều khiển luồng trong C# 44
Toán tử ? : trong C# 46
Vòng lặp trong C# 46

Các lệnh điều khiển vòng lặp trong C# 47
Vòng lặp vô hạn trong C# 47
Ví dụ 48
Tính đóng gói trong C# 48
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 3

Public Access Specifier trong C# 49
Private Access Specifier trong C# 50
Protected Access Specifier trong C# 52
Internal Access Specifier trong C# 52
Protected Internal Access Specifier trong C# 54
Phương thức trong C# 54
Định nghĩa phương thức trong C# 54
Ví dụ 55
Gọi phương thức trong C# 56
Gọi phương thức đệ qui trong C# 58
Truyền tham số cho phương thức trong C# 59
Nullable trong C# 60
Toán tử ?? trong C# 61
Mảng (Array) trong C# 62
Khai báo mảng trong C# 62
Khởi tạo mảng trong C# 63
Gán giá trị cho một mảng trong C# 63
Truy cập các phần tử mảng trong C# 64
Sử dụng vòng lặp foreach trong C# 65
Chi tiết về mảng trong C# 66
Chuỗi (String) trong C# 67
Tạo một đối tượng String trong C# 67

Các thuộc tính của lớp String trong C# 69
Phương thức của lớp String trong C# 69
Ví dụ 74
Cấu trúc (Structure) trong C# 77
Định nghĩa cấu trúc trong C# 77
Đặc điểm của cấu trúc trong C# 79
Phân biệt Class và Structure trong C# 80
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 4

Enum trong C# 82
Khai báo biến enum trong C# 82
Ví dụ 83
Lớp (Class) trong C# 83
Định nghĩa một Class trong C# 84
Hàm thành viên và tính đóng gói trong C# 86
Constructor trong C# 88
Destructor trong C# 91
Thành viên Static của một Class trong C# 92
Tính kế thừa trong C# 95
Lớp cơ sở (Base Class) và Lớp thừa kế (Derived Class) trong C# 95
Khởi tạo Lớp cơ sở (Base Class) trong C# 97
Đa kế thừa trong C# 99
Tính đa hình trong C# 101
Đa hình static trong C# 101
Nạp chồng hàm trong C# 102
Đa hình dynamic trong C# 103
Nạp chồng toán tử trong C# 107
Triển khai Nạp chồng toán tử trong C# 107

Toán tử có thể nạp chồng và không thể nạp chồng trong C# 110
Ví dụ 111
Interface trong C# 117
Khai báo Interface trong C# 117
Ví dụ 117
Namespace trong C# 120
Định nghĩa một Namespace trong C# 120
Từ khóa using trong C# 121
Lồng Namespace trong C# 123
Chỉ thị tiền xử lý trong C# 125
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 5

Các chỉ thị tiền xử lý trong C# 125
Chỉ thị tiền xử lý #define trong C# 126
Chỉ thị có điều kiện (Conditional Directive) trong C# 127
Regular Expression trong C# 128
Construct cho định nghĩa Regular Expression trong C# 128
Lớp Regex trong C# 129
Ví dụ 1 130
Ví dụ 2 131
Ví dụ 3 132
Xử lý ngoại lệ (Exception Handling) trong C# 133
Cú pháp 134
Lớp Exception trong C# 135
Xử lý ngoại lệ ( Exception Handling) trong C# 136
Tạo User-Defined Exception trong C# 137
Ném các Object trong C# 139
File I/O trong C# 139

Lớp I/O trong C# 139
Lớp FileStream trong C# 140
Ví dụ 142
Hoạt động File nâng cao trong C# 143
Attribute trong C# 143
Xác định một Attribute trong C# 144
Attribute được định nghĩa trước trong C# 144
AttributeUsage trong C# 144
Conditional trong C# 145
Obsolete trong C# 147
Tạo Custom Attribute trong C# 148
Khai báo một Custom Attribute trong C# 149
Xây dựng Custom Attribute trong C# 149
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 6

Áp dụng Custom Attribute trong C# 151
Reflection trong C# 152
Các ứng dụng của Reflection 152
Quan sát Metadata trong C# 153
Ví dụ 155
Thuộc tính (Property) trong C# 159
Accessor trong C# 160
Ví dụ 161
Thuộc tính trừu tượng trong C# 164
Indexer trong C# 166
Cú pháp 167
Sự sử dụng của Indexer trong C# 167
Nạp chồng Indexer trong C# 170

Delegate trong C# 173
Khai báo Delegate trong C# 173
Khởi tạo Delegate trong C# 173
Multicast một Delegate trong C# 175
Cách sử dụng Delegate trong C# 177
Sự kiện (Event) trong C# 178
Sử dụng Delegate với Event trong C# 179
Khai báo Event trong C# 179
Ví dụ 1 179
Ví dụ 2 181
Collection trong C# 185
Các lớp Collection và cách sử dụng của chúng trong C# 185
Generic trong C# 186
Đặc điểm của Generic trong C# 189
Các phương thức Generic trong C# 190
Generic Delegate trong C# 191
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 7

Phương thức nặc danh trong C# 193
Viết một Phương thức nặc danh trong C# 193
Ví dụ 194
Unsafe code trong C# 195
Con trỏ (Pointer) trong C# 196
Thu hồi giá trị dữ liệu bởi sử dụng con trỏ trong C# 197
Truyền Con trỏ như là các Tham số tới phương thức trong C# 198
Truy cập các phần tử mảng bởi sử dụng một con trỏ trong C# 199
Biên dịch Unsafe Code trong C# 200
Đa luồng (Multithread) trong C# 201

Vòng đời của Thread trong C# 201
Main Thread trong C# 202
Thuộc tính và Phương thức của lớp Thread trong C# 203
Tạo Thread trong C# 208
Quản lý Thread trong C# 209
Hủy Thread trong C# 210
Tài liệu tham khảo C# 212
Link hữu ích về C# 212






Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 8


Học C# cơ bản và nâng cao
C# là một ngôn ngữ lập trình đơn giản, hiện đại, mục đích tổng quát, hướng đối tượng được phát
triển bởi Microsoft bên trong phần khởi đầu .NET của họ, được phát triển chủ yếu bởi Anders
Hejlsberg, một kiến trúc sư phần mềm nổi tiếng với các sản phẩm Turbo Pascal, Delphi, J++, WFC.
Loạt bài hướng dẫn này sẽ cung cấp cho bạn kiến thức cơ bản về lập trình C# qua các khái niệm
từ cơ bản đến nâng cao liên quan tới ngôn ngữ lập trình C#.
Loạt bài hướng dẫn của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint
Đối với độc giả
Loạt bài hướng dẫn này được xây dựng cho người mới học để giúp họ hiểu các khái niệm cơ bản
về lập trình C#.
Điều kiện tiền đề

Ngôn ngữ lập trình C# là dựa trên các ngôn ngữ lập trình C và C++, vì thế, nếu bạn đã hiểu cơ bản
về C và C++, thì điều này sẽ giúp bạn học tập C# dễ dàng hơn.
Tổng quan về C#
C# là một ngôn ngữ lập trình đơn giản, hiện đại, mục đích tổng quát, hướng đối tượng được phát
triển bởi Microsoft và được phê chuẩn bởi European Computer Manufacturers Association (ECMA)
và International Standards Organization (ISO).
C# được phát triển bởi Anders Hejlsberg và team của ông trong khi phát triển .Net Framework.
C# được thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code và
Runtime Environment, cho phép chúng ta sử dụng các ngôn ngữ high-level đa dạng trên các nền
tảng và cấu trúc máy tính khác nhau.
Dưới đây là các lý do làm C# là ngôn ngữ lập trình chuyên nghiệp được sử dụng rộng rãi:
 Nó là một ngôn ngữ lập trình hiện đại, mục đích tổng quát.
 Nó là hướng đối tượng.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 9

 Nó dễ dàng để học.
 Nó là một ngôn ngữ được cấu trúc.
 Nó tạo các chương trình hiệu quả.
 Nó có thể được biên dịch trên nhiều nền tảng máy tính khác nhau.
 Nó là một phần của .Net Framework.
Các đặc điểm lập trình mạnh mẽ của C#
Cấu trúc C# khá gần với các ngôn ngữ high-level truyền thống, C và C++, và là một ngôn ngữ lập
trình hướng đối tượng. Nó có sự giống nhau mạnh mẽ với Java, nó có nhiều đặc điểm lập trình
mạnh mẽ mà làm cho nó trở nên ưa thích với các lập trình viên trên toàn thế giới.
Dưới đây là các đặc điểm quan trọng của C#:
 Điều kiện Boolean
 Tự động dọn rác bởi Garbage-Collector (GC)
 Thư viện chuẩn (Standard Library)

 Assembly
 Property và sự kiện (Event)
 Delegate Quản lý sự kiện
 Dễ dàng để sử dụng Generic
 Indexer
 Biên dịch có điều kiện (Conditional Compilation)
 Đa luồng dễ dàng (Multithreading)
 LINQ và Lambda Expression
 Tích hợp với Windows
Cài đặt môi trường C#
Trong chương này, chúng tôi sẽ giới thiệu các công cụ cần thiết để cài đặt môi trường C#. Chúng
tôi đã đề cập rằng C# là một phần của .Net Framework và được sử dụng để viết các ứng dụng
.Net. Vì thế, trước khi thảo luận về các công cụ có sẵn để chạy một chương trình C#, bạn nên hiểu
cách C# liên quan tới .Net Framework.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 10

Giới thiệu .Net Framework
.Net Framework là một nền tảng mang tính cách mạng giúp bạn viết các kiểu ứng dụng sau:
 Windows application
 Web application
 Dịch vụ Web
Các ứng dụng .Net Framework là các ứng dụng đa nền tảng. Nền tảng đã được thiết kế theo cách
như vậy có thể được sử dụng từ bất kỳ ngôn ngữ lập trình nào: C#, C++, Visual Basic, Jscript,
COBOL, …. Tất cả các ngôn ngữ này có thể truy cập tới nền tảng này cũng như giao tiếp với nhau.
.Net Framework gồm một thư viện code khổng lồ được sử dụng bởi các ngôn ngữ client như C#.
Dưới đây là một số thành phần của .Net Framework.
 Common Language Runtime (CLR)
 .Net Framework Class Library

 Common Language Specification
 Common Type System
 Metadata và Assembly
 Windows Form
 ASP.Net và ASP.Net AJAX
 ADO.Net
 Windows Workflow Foundation (WF)
 Windows Presentation Foundation
 Windows Communication Foundation (WCF)
 LINQ
Integrated Development Environment (IDE) cho C#
Microsoft cung cấp các công cụ phát triển sau cho lập trình C#:
 Visual Studio 2010 (VS)
 Visual C# 2010 Express (VCE)
 Visual Web Developer
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 11

Hai công cụ sau là có sẵn và miễn phí tại Website chính thức của Microsoft. Sử dụng các tool này,
bạn có thể viết tất cả các loại chương trình C# từ các ứng dụng dòng lệnh đơn giản tới các ứng
dụng phức tạp hơn. Bạn cũng có thể viết các tệp source code của C# bởi sử dụng một Text Editor
cơ bản, như Notepad, và biên dịch code đó vào trong Assembly bởi sử dụng Command-line
Compiler, mà là một phần của .Net Framework.
Trong loạt bài này, chúng tôi sử dụng Visual C# 2010 Express và bạn có thể tải nó từ:Microsoft
Visual Studio. Nó được cài đặt tự động trên máy tính của bạn.
Viết chương trình C# trên Linux hoặc Mac OS
Mặc dù .Net Framework chạy trên Hệ điều hành Windows, nhưng cũng có một số phiên bản thay
thế làm việc trên các Hệ điều hành khác. Mono là một phiên bản mã nguồn mở của .Net
Framework mà gồm một C# compiler và chạy trên một số Hệ điều hành, gồm Linux và Mac OS.

Bạn có thể truy cập: Go Mono.
Mục đích của Mono không chỉ để chạy trên các ứng dụng .Net trên Microsoft, mà còn đem lại công
cụ phát triển cho các lập trình viên Linux. Mono có thể chạy trên nhiều Hệ điều hành khác nhau,
như Android, BSD, iOS, Linux, OS X, Windows, Solaris, và UNIX.
Cấu trúc chương trình C#
Trước khi học về cách xây dựng các khối của ngôn ngữ lập trình C#, chúng ta nên tìm hiểu cấu
trúc cơ bản chương trình C#.
Tạo chương trình Hello World trong C#
Một chương trình C# gồm các phần sau:
 Khai báo Namespace
 Một class
 Phương thức của lớp
 Thuộc tính của lớp
 Một phương thức Main
 Lệnh và biểu thức
 Comment
Bạn theo dõi đoạn code đơn giản sau sẽ in “Hello World”:
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 12

using System;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* my first program in C# */
Console.WriteLine("Hello World");

Console.ReadKey();
}
}
}
Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
Hello World
Giờ chúng ta xem xét các phần của chương trình trên:
 Dòng đầu tiên using System;. Từ khóa using được sử dụng để bao Systemnamespace
trong chương trình. Nói chung, một chương trình có nhiều lệnh using.
 Dòng tiếp theo có khai báo namespace. Một namespace là một tập hợp các
lớp.HelloWorldApplication namespace chứa class HelloWorld.
 Dòng tiếp theo có một khai báo class, class HelloWorld chứa các định nghĩa dữ liệu và
phương thức mà chương trình của bạn sử dụng. Nói chung, class chứa nhiều phương
thức. Các phương thức định nghĩa hành vi của class. Tuy nhiên, lớpHelloWorld chỉ có một
phương thức Main.
 Dòng tiếp theo định nghĩa phương thức Main, mà là entry point cho tất cả chương trình
C#. Phương thức Main biểu diễn trạng thái lớp khi được thực thi.
 Dòng tiếp theo /*…*/ bị bỏ qua bởi compiler và nó là comment cho chương trình.
 Phương thức Main xác định hành vi của nó với lệnh Console.WriteLine("Hello World");
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 13

WriteLine là một phương thức của lớp Console được định nghĩa trong System namespace.
Lệnh này làm thông báo “Hello, World!” được hiển thị trên màn hình.
 Dòng cuối cùng Console.ReadKey(); là cho VS.NET Users. Nó làm chương trình đợi cho
một phím được nhấn và nó ngăn cản màn hình chạy và đóng một cách nhanh chóng khi
chương trình được phát động từ Visual Studio.Net.
Bạn nên ghi nhớ các điểm sau:
 C# là phân biệt kiểu chữ (case sensitive).

 Tất cả lệnh và biểu thức phải kết thúc với một dấu chấm phảy (;).
 Sự thực thi chương trình bắt đầu tại phương thức Main.
 Không giống Java, tên file chương trình có thể khác tên lớp.
Biên dịch và thực thi chương trình C#
Nếu bạn đang sử dụng Visual Studio.Net để biên dịch và thực thi các chương trình C#, bạn theo
các bước sau:
 Bắt đầu Visual Studio.
 Trên thanh menu, chọn File -> New -> Project.
 Chọn Visual C# từ các Template, và sau đó chọn Windows.
 Chọn Console Application.
 Xác định tên cho project và nhấn nút OK.
 Điều này tạo New Project trong Solution Explorer.
 Viết code trong Code Editor.
 Nhấn nút Run hoặc nhấn phím F5 để thực thi project. Một cửa sổ Command Prompt xuất
hiện mà chứa dòng Hello World.
Bạn có thể biên dịch một chương trình C# bởi sử dụng command-line thay cho Visual Studio IDE:
 Mở một Text Editor và thêm code trên vào.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 14

 Lưu tệp dưới dạng helloworld.cs
 Mở công cụ Command Prompt tool và tới thư mục nơi bạn lưu file đó.
 Soạn csc helloworld.cs và nhấn Enter để biên dịch code của bạn.
 Nếu không có lỗi nào trong code, thì Command prompt đưa bạn tới dòng tiếp theo và tạo
tệp helloworld.exe có thể thực thi (executable).
 Soạn helloworld để thực thi chương trình của bạn.
 Bạn có thể thấy output là Hello World được in trên màn hình.
Cú pháp C# cơ bản
C# là một ngôn ngữ lập trình hướng đối tượng. Trong phương pháp lập trình hướng đối tượng, một

chương trình gồm các đối tượng đa dạng mà tương tác với nhau các cách thức của action. Các
action mà một đối tượng có thể nhận được gọi là các phương thức. Các đối tượng cùng loại được
xem như là có cùng kiểu hoặc, được xem như là trong cùng lớp.
Ví dụ, xét đối tượng Rectangle. Nó có các thuộc tính như length và width. Phụ thuộc vào thiết kế
trên. Nó có thể cần những cách để cấp nhận các giá trị của thuộc tính này, tính toán diện tích và
hiển thị chi tiết.
Bạn theo dõi ví dụ sau triển khai một lớp Rectangle và cú pháp C# cơ bản của chương trình này:
using System;
namespace RectangleApplication
{
class Rectangle
{
// member variables
double length;
double width;
public void Acceptdetails()
{
length = 4.5;
width = 3.5;
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 15

}

public double GetArea()
{
return length * width;
}


public void Display()
{
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}

class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
Length: 4.5
Width: 3.5
Area: 15.75
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 16

Từ khóa using trong C#
Lệnh đầu tiên trong bất kỳ chương trình C# nào là:
using System;

Từ khóa using được sử dụng để bao namespace trong chương trình. Một chương trình C# có thể
bao nhiều lệnh using.
Từ khóa class trong C#
Từ khóa class được sử dụng để khai báo một lớp trong C#.
Comments trong C#
Comment được sử dụng để thuyết minh code. Compiler bỏ qua các comment. Các comment đa
dòng trong các chương trình C# bắt đầu với /* và kết thúc với */ như sau:
/* This program demonstrates
The basic syntax of C# programming
Language */
Comment đơn dòng được chỉ dẫn bởi ký hiệu „//‟. Ví dụ:
}//end class Rectangle
Biến thành viên trong C#
Các biến là các thuộc tính hoặc thành viên dữ liệu của một lớp, được sử dụng để lưu giữ dữ liệu.
Trong chương trình trước đó, lớp Rectangle có hai biến thành viên là length và width.
Hàm thành viên trong C#
Hàm là tập hợp các lệnh mà thực hiện một tác vụ cụ thể. Các hàm thành viên của một lớp được
khai báo bên trong lớp đó. Lớp Rectangle chứa 3 hàm thành viên
là: AcceptDetails,GetArea và Display.
Thuyết minh một Class trong C#
Trong chương trình trên, lớp ExecuteRectangle chứa phương thức Main() và thuyết minh
lớpRectangle.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 17

Định danh (Identifier) trong C#
Một định danh là một tên được sử dụng để nhận diện một lớp, biến, hàm hoặc bất kỳ mục tự định
nghĩa (user-defined).
 Một tên phải bắt đầu với một chữ cái mà có thể được theo sau bởi một dãy các chữ cái, ký

số (0-9) hoặc dấu gạch dưới (_). Ký tự đầu tiên của một định danh không thể là một ký số.
 Nó phải không chứa bất kỳ khoảng trống hoặc ký tự như ? - + ! @ # % ^ & * ( ) [ ] { } . ; : " ' /
và \. Tuy nhiên, dấu gạch dưới có thể được sử dụng.
 Nó không nên là một từ khóa trong C#.
Từ khóa trong C#
Từ khóa là các từ dành riêng (Reserved Keyword) được định nghĩa trước cho C# compiler. Những
từ khóa này không thể được sử dụng làm định danh. Tuy nhiên, nếu bạn muốn sử dụng các từ
khóa này để làm định danh, bạn có thể đặt ký tự @ ở trước chúng.
Trong C#, một số định danh có ý nghĩa đặc biệt trong ngữ cảnh của code, ví dụ như get và set
được gọi là các contextual keyword (từ khóa thuộc ngữ cảnh).
Bảng sau liệt kê các từ khóa dành riêng và các từ khóa thuộc ngữ cảnh trong C#:
Reserved Keyword
abstract
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double

else
enum
event
explicit
extern
false
finally
fixed
float
for
foreach
goto
if
implicit
in
in (generic
modifier)
int
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 18

interface
internal
is
lock
long
namespace
new
null

object
operator
out
out (generic
modifier)
override
params
private
protected
public
readonly
ref
return
sbyte
sealed
short
sizeof
stackalloc
static
string
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked

unsafe
ushort
using
virtual
void
volatile
while





Contextual Keyword trong C#
add
alias
ascending
descending
dynamic
from
get
global
group
into
join
let
orderby
partial
(type)
partial
(method)

remove
select
set



Kiểu dữ liệu trong C#
Các biến trong C# được phân chia thành các kiểu sau:
 Kiểu giá trị (Value type)
 Kiểu tham chiếu (Reference type)
 Kiểu con trỏ (Pointer type)
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 19

Kiểu giá trị trong C#
Các biến kiểu giá trị có thể được gán một giá trị một cách trực tiếp. Chúng được kế thừa từ
lớp System.ValueType.
Kiểu giá trị trực tiếp chứa dữ liệu. Một số ví dụ là int, char, và float, tương ứng giữ số nguyên, chữ
cái, và số thực. Khi bạn khai báo một kiểu int, hệ thống cấp phát bộ nhớ để lưu giá trị đó.
Bảng sau liệt kê các kiểu giá trị có sẵn trong C# 2010:
Kiểu
Biểu diễn
Dãy giá trị
Giá trị
mặc
định
bool
Giá trị Boolean
True hoặc False

False
byte
Kiểu unsigned integer
(8 bit)
0 tới 255
0
char
Kiểu Unicode
character (16 bit)
U +0000 tới U +ffff
'\0'
decimal
Kiểu thập phân (128
bit)
(-7.9 x 10
28
tới 7.9 x 10
28
) / 10
0 to 28

0.0M
double
Kiểu double (64 bit)
(+/-)5.0 x 10
-324
tới (+/-)1.7 x 10
308

0.0D

float
Kiểu float (32 bit)
-3.4 x 10
38
tới + 3.4 x 10
38

0.0F
int
Kiểu integer (32 bit)
-2,147,483,648 tới 2,147,483,647
0
long
Kiểu signed integer (64
bit)
-9,223,372,036,854,775,808 tới
9,223,372,036,854,775,807
0L
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 20

sbyte
Kiểu signed integer (8
bit)
-128 tới 127
0
short
Kiểu signed integer (16
bit)

-32,768 tới 32,767
0
uint
Kiểu unsigned integer
(32 bit)
0 tới 4,294,967,295
0
ulong
Kiểu unsigned integer
(64 bit)
0 tới 18,446,744,073,709,551,615
0
ushort
Kiểu unsigned integer
(16 bit)
0 tới 65,535
0
Để lấy kích cỡ chính xác của một kiểu hoặc một biến trên một nền tảng cụ thể, bạn có thể sử dụng
phương thức sizeof. Biểu thức sizeof(type) hiển thị kích cỡ của đối tượng hoặc kiểu bằng giá trị
byte. Ví dụ dưới đây để lấy kích cỡ của kiểu int trên bất kỳ máy tính:
using System;
namespace DataTypeApplication
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}

}
}
Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
Size of int: 4
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 21

Kiểu tham chiếu trong C#
Kiểu tham chiếu không chứa dữ liệu thực sự được lưu giữ trong một biến, nhưng chúng chứa một
tham chiếu tới các biến.
Nói cách khác, chúng tham chiếu tới một vị trí bộ nhớ. Việc sử dụng nhiều biến, thì kiểu tham chiếu
có thể tham chiếu tới tới một vị trí bộ nhớ. Nếu dữ liệu trong vị trí bộ nhớ bị thay đổi bởi một trong
số các biến, thì biến khác tự động phản ánh sự thay đổi về giá trị này. Ví dụ các kiểu tham chiếu có
sẵn trong C# là: object, dynamic, và string.
Kiểu object trong C#
Kiểu object là lớp cơ sở cơ bản cho tất cả kiểu dữ liệu trong C# Common Type System (CTS).
Object là một alias cho lớp System.Object. Các kiểu object có thể được gán giá trị của bất kỳ kiểu,
kiểu giá trị, kiểu tham chiếu, kiểu tự định nghĩa (user-defined) khác. Tuy nhiên, trước khi gán các
giá trị, nó cần một sự chuyển đổi kiểu.
Khi một kiểu giá trị được chuyển đổi thành kiểu object, nó được gọi là boxing và ngược lại, khi một
kiểu object được chuyển đổi thành kiểu giá trị, nó được gọi là unboxing.
object obj;
obj = 100; // this is boxing
Kiểu Dynamic trong C#
Bạn có thể lưu giữ bất kỳ kiểu giá trị nào trong biến kiểu dữ liệu dynamic. Việc kiểm tra các kiểu
biến này diễn ra tại run time.
Cú pháp để khai báo một kiểu dynamic trong C# là:
dynamic <variable_name> = value;
Ví dụ

dynamic d = 20;
Kiểu dynamic là tương tự với kiểu object, ngoại trừ việc kiểm tra cho các biến kiểu object diễn ra tại
compile time, trong khi việc kiểm tra các biến kiểu dynamic diễn ra tại run time.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 22

Kiểu string trong C#
Kiểu string trong C# cho phép bạn gán bất kỳ giá trị chuỗi nào cho một biến. Kiểu string là
một alias cho lớp System.String. Nó kế thừa từ kiểu object. Giá trị cho một kiểu string có thể được
gán bởi sử dụng các hằng chuỗi trong hai mẫu: quoted và @quoted.
Ví dụ:
String str = "Tutorials Point";
Và một hằng chuỗi @quoted trông như sau:
@"Tutorials Point";
Các kiểu tự định nghĩa (user-defined) trong C# là: Class, Interface, hoặc Delegate. Chúng ta sẽ
bàn về các kiểu này trong các chương sau.
Kiểu con trỏ trong C#
Các biến kiểu con trỏ lưu giữ địa chỉ bộ nhớ của kiểu khác. Các con trỏ trong C# có khả năng như
con trỏ trong C hoặc C++.
Cú pháp để khai báo một kiểu con trỏ trong C# là:
type* identifier;
Ví dụ:
char* cptr;
int* iptr;
Chúng ta sẽ thảo luận về kiểu con trỏ ở chương: Unsafe Code trong C#.
Chuyển đổi kiểu trong C#
Chuyển đổi kiểu trong C# là biến đổi một kiểu dữ liệu này thành kiểu dữ liệu khác. Nó còn được gọi
là Ép kiểu. Trong C#, ép kiểu có hai mẫu sau:
 Chuyển đổi kiểu ngầm định (implicit) - Việc chuyển đổi này được thực hiện bởi C# theo

một phương thức an toàn kiểu (type-safe). Ví dụ: việc chuyển đổi từ các lớp kế thừa thành
các lớp cơ sở.
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 23

 Chuyển đổi kiểu tường minh (explicit) - Việc chuyển đổi này được thực hiện một cách rõ
ràng bởi người dùng bằng việc sử dụng các hàm được định nghĩa trước. Các chuyển đổi
kiểu tường minh cần một toán tử cast.
Ví dụ sau minh họa một sự chuyển đổi kiểu tường minh trong C#:
using System;
namespace TypeConversionApplication
{
class ExplicitConversion
{
static void Main(string[] args)
{
double d = 5673.74;
int i;

// cast double to int.
i = (int)d;
Console.WriteLine(i);
Console.ReadKey();
}
}
}
Khi code trên được biên dịch và thực thi, nó sẽ cho kết quả:
5673
Phương thức chuyển đổi kiểu trong C#

C# cung cấp các phương thức chuyển đổi kiểu có sẵn được liệt kê trong bảng sau:
STT
Phương thức & Miêu tả
1
ToBoolean
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 24

Chuyển đổi một kiểu thành một giá trị Boolean, nếu có thể
2
ToByte
Chuyển đổi một kiểu thành một byte
3
ToChar
Chuyển đổi một kiểu thành một Unicode character, nếu có thể
4
ToDateTime
Chuyển đổi một kiểu (kiểu integer hoặc string) thành các cấu trúc date-time
5
ToDecimal
Chuyển đổi một kiểu số thực hoặc số nguyên thành một kiểu thập phân
6
ToDouble
Chuyển đổi một kiểu thành một kiểu double
7
ToInt16
Chuyển đổi một kiểu thành một 16-bit integer
8
ToInt32

Chuyển đổi một kiểu thành một 32-bit integer
9
ToInt64
Chuyển đổi một kiểu thành một 64-bit integer
10
ToSbyte
Chuyển đổi một kiểu thành một kiểu signed byte
Copyright © vietjack.com

Trang chia sẻ các bài học online miễn phí Trang 25

11
ToSingle
Chuyển đổi một kiểu thành một số small floating point
12
ToString
Chuyển đổi một kiểu thành một string
13
ToType
Chuyển đổi một kiểu thành một kiểu đã xác định
14
ToUInt16
Chuyển đổi một kiểu thành một kiểu unsigned int
15
ToUInt32
Chuyển đổi một kiểu thành một kiểu unsigned long
16
ToUInt64
Chuyển đổi một kiểu thành một unsigned big integer
Ví dụ sau minh họa cách chuyển đổi các kiểu đa dạng thành kiểu string trong C#:

using System;
namespace TypeConversionApplication
{
class StringConversion
{
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;

×