1. Trang chủ
  2. » Công Nghệ Thông Tin

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

212 402 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 212
Dung lượng 1,82 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.

Trang 1

http://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

Trang 2

http://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

Trang 3

http://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

Trang 4

http://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

Trang 5

http://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

Trang 6

http://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

Trang 7

http://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

Trang 8

http://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

Trang 9

http://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

Trang 10

http://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:

 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

Trang 11

http://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

Trang 12

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 12

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");

Trang 13

http://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

Trang 14

http://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:

Trang 15

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 15

Console WriteLine ( "Length: {0}" , length );

Console WriteLine ( "Width: {0}" , width );

Console WriteLine ( "Area: {0}" , GetArea ());

Trang 16

http://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

Trang 17

http://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

modifier)

int

Trang 18

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 18

modifier)

volatile while

Contextual Keyword trong C#

(type)

partial

(method)

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)

Trang 19

http://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:

mặc định

byte Kiểu unsigned integer

long Kiểu signed integer (64

bit)

-9,223,372,036,854,775,808 tới 9,223,372,036,854,775,807

0L

Trang 20

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 20

sbyte Kiểu signed integer (8

Để 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:

Trang 21

http://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

Trang 22

http://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ở

Trang 23

http://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#:

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

Trang 24

http://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ể

Trang 25

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 25

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#:

Trang 26

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 26

Console WriteLine ( ToString ());

Console WriteLine ( ToString ());

Console WriteLine ( ToString ());

Console WriteLine ( ToString ());

Các kiểu giá trị cơ bản trong C# có thể được phân chia thành:

Kiểu Integral sbyte, byte, short, ushort, int, uint, long, ulong, và char

Kiểu Floating point float và double

Trang 27

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 27

C# cũng cho phép định nghĩa các kiểu giá trị khác của biến như kiểu enum và các kiểu tham chiếu của biến như class, sẽ được bàn luận trong các chương tới

Định nghĩa biến trong C#

Cú pháp để định nghĩa biến trong C# là:

<data_type> <variable_list> ;

Ở đây, data_type phải là một kiểu dữ liệu hợp lệ trong C#, gồm: char, int, double hoặc bất kỳ kiểu

dữ liệu tự định nghĩa (user-defined) nào và variable_list có thể chứa một hoặc nhiều tên định danh

được phân biệt bởi dấu phảy

Dưới đây là một số định nghĩa biến hợp lệ trong C#:

Biến được khởi tạo (được gán một giá trị) với một dấu bằng được theo sau bởi một biểu thức hằng Form chung cho khởi tạo biến trong C# là:

Trang 28

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 28

Một số ví dụ về khởi tạo biến trong C# là:

int d = 3 f = 5 /* initializing d and f */

byte z = 22 ; /* initializes z */

double pi = 3.14159 ; /* declares an approximation of pi */

char x = 'x' ; /* the variable x has the value 'x' */

Việc khởi tạo biến một cách chính xác là một bài thực hành tốt cho bạn, nếu không thì chương trình có thể tạo ra kết quả không mong đợi

Ví dụ sau sử dụng các kiểu biến đa dạng trong C#:

Trang 29

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 29

a = 10, b = 20, c = 30

Nhận giá trị từ người dùng trong C#

Lớp Console trong System namespace cung cấp hàm ReadLine() để nhận đầu vào từ người

dùng và lưu nó vào trong một biến

Ví dụ:

int num ;

num = Convert ToInt32 ( Console ReadLine ());

Hàm Convert.ToInt32() chuyển đổi dữ liệu đã nhập bởi người dùng thành kiểu dữ liệu int, bởi

vì Console.ReadLine() chấp nhận dữ liệu trong định dạng chuỗi

Biểu thức lvalue và rvalue trong C#

Có hai loại biểu thức trong C#:

lvalue: Một biểu thức mà là một lvalue có thể xuất hiện hoặc bên trái hoặc bên phải của phép gán trong C#

rvalue: Một biểu thức mà là một rvalue có thể xuất hiện bên phải nhưng không thể ở bên trái của một phép gán trong C#

Các biến là lvalue và vì thế chúng có thể xuất hiện ở bên trái của một phép gán Các hằng số là rvalue và vì thế chúng không thể được gán và không thể xuất hiện ở bên trái của một phép gán Sau đây là một lệnh hợp lệ trong C#:

Trang 30

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 30

Constant là một kiểu dữ liệu thay thế cho Literal, còn Literal thể hiện chính nó Trong ví dụ: const PI

= 3.14 thì Constant ở đây là PI, còn Literal là 3.14

Constant có thể là bất kỳ kiểu dữ liệu cơ bản nào trong C#, và có thể được phân chia thành giá trị hằng số nguyên, hằng số thực, hằng ký tự, hằng chuỗi và Boolean literal (tạm dịch: hằng logic) Ngoài ra, C# cũng có các kiểu hằng liệt kê

Ngoài ra, constant được đối xử giống như các biến thông thường, ngoại trừ việc giá trị của chúng

là không thể thay đổi sau khi định nghĩa

Hằng số nguyên trong C#

Hằng số nguyên có thể là decimal (cơ số 10), octal (cơ số 8) hay hexadecimal (cơ số 16) Giá trị

có tiền tố (prefix) là 0 cho octal, là 0x hay 0X cho hexadecimal và không có gì cho decimal

Một hằng số nguyên cũng có các hậu tố (suffix) U hay L thể hiện kiểu unsigned hay long Hậu tố có thể là chữ hoa hoặc chữ thường và có thể trong bất kỳ thứ tự nào

Ví dụ về các hằng số nguyên:

212 /* Legal */

215u /* Legal */

0xFeeL /* Legal */

078 /* Illegal: 8 is not an octal digit */

032UU /* Illegal: cannot repeat a suffix */

Dưới đây là các kiểu hằng số nguyên đa dạng:

Trang 31

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 31

Hằng số thực trong C#

Một hằng số thực bao gồm phần nguyên (integer part), dấu chấm thập phân (decimal point), phần

lẻ (fraction part) và phần mũ (exponent part) Chúng ta có thể biểu diễn hằng số thực theo dạng decimal hay dạng mũ

Xét các ví dụ sau:

3.14159 /* Legal */

314159E-5L /* Legal */

510E /* Illegal: incomplete exponent */

210f /* Illegal: no decimal or exponent */

e55 /* Illegal: missing integer or fraction */

Khi thể hiện dạng decimal phải bao gồm dấu chấm thập phân, phần mũ hoặc cả hai Khi thể hiện dạng mũ phải gồm phần nguyên, phần lẻ hoặc cả hai Dạng mũ đi kèm với kí tự E hoặc e

Hằng ký tự trong C#

Các hằng kí tự trong C# mở đầu và kết thúc bởi dấu nháy đơn Nếu hằng ký tự bắt đầu với L (ví

dụ L„x‟) thì nó là kiểu wchar_t Nếu không thì, nó là hằng ký tự kiểu char, ví dụ như „x‟

Hằng kí tự có thể là một kí tự (như „X‟), một escape sequence (như „\t‟) hay một kí tự mở rộng (như

„\u02c0′)

Một số kí tự trong C# khi được đứng trước bởi dấu \ thì chúng sẽ mang một ý nghĩa đặc biệt như bắt đầu dòng mới „\n‟ hay tạo một tab „\t‟ Chúng được biết như là escape sequence (dãy thoát) Bảng dưới đây thể hiện một số mã escape sequence phổ biến:

Dãy thoát Ý nghĩa

Trang 32

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 32

\xhh Số thập lục phân của một hoặc nhiều ký số

Sau đây là ví dụ để chỉ một số ký tự dãy thoát:

Trang 33

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 33

Hằng chuỗi chứa trong dấu nháy kép, ví dụ “abc” Một chuỗi sẽ chứa các kí tự tương tự hằng kí

tự, gồm các ký tự thuần, escape sequence, và các ký tự mở rộng

Có thể ngắt một dòng dài thành nhiều dòng bởi sử dụng hằng chuỗi và phân biệt chúng bởi sử dụng khoảng trắng (whitespace)

Xét ví dụ một hằng chuỗi trong C# thể hiện theo 3 cách khác nhau:

Hằng trong C# được định nghĩa bởi sử dụng từ khóa const Cú pháp để định nghĩa một hằng là:

const <data_type> <constant_name> value ;

Chương trình sau minh họa cách định nghĩa và sử dụng một hằng trong chương trình C# của bạn:

Trang 34

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 34

// constant declaration

double r ;

Console WriteLine ( "Enter Radius: " );

r = Convert ToDouble ( Console ReadLine ());

Trang 35

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 35

Ví dụ

Toán

tử

Toán tử quan hệ trong C#

Bảng dưới đây liệt kê các toán tử quan hệ được hỗ trợ bởi ngôn ngữ C# Giả sử biến A giữ giá trị

Trang 36

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 36

!= Kiểm tra 2 toán hạng có giá trị khác nhau hay không Nếu không bằng thì

điều kiện là true

(A != B) là true

> Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn toán hạng bên phải hay

không Nếu lớn hơn thì điều kiện là true

(A >

B) là không đúng

< Kiểm tra nếu toán hạng bên trái nhỏ hơn toán hạng bên phải hay không Nếu

nhỏ hơn thì là true

(A <

B) là true

>= Kiểm tra nếu toán hạng bên trái có giá trị lớn hơn hoặc bằng giá trị của toán

hạng bên phải hay không Nếu đúng là true

(A >= B) là không đúng

<= Kiểm tra nếu toán hạng bên trái có giá trị nhỏ hơn hoặc bằng toán hạng bên

phải hay không Nếu đúng là true

(A <= B) là true

Toán tử logic trong C#

Bảng dưới đây chỉ rõ tất cả các toán tử logic được hỗ trợ bởi ngôn ngữ C# Giả sử biến A có giá trị

&& Được gọi là toán tử logic AND (và) Nếu cả hai toán tử đều có giá trị khác 0

thì điều kiện trở lên true

(A

&&

B) là false

Trang 37

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 37

|| Được gọi là toán tử logic OR (hoặc) Nếu một trong hai toán tử khác 0, thì

điều kiện là true

(A || B) là true

! Được gọi là toán tử NOT (phủ định) Sử dụng để đảo ngược lại trạng thái

logic của toán hạng đó Nếu điều kiện toán hạng là true thì phủ định nó sẽ là

false

!(A

&&

B) là true

Toán tử so sánh bit trong C#

Toán tử so sánh bit làm việc trên đơn vị bit, tính toán biểu thức so sánh từng bit Bảng dưới đây về

&, |, và ^ như sau:

Trang 38

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 38

~A = 1100 0011

Các toán tử so sánh bit được hỗ trợ bởi ngôn ngữ C# được liệt kê trong bảng dưới đây Giá sử ta

có biến A có giá tri 60 và biến B có giá trị 13, ta có:

là 12, tức là

0000

1100

| Toán tử OR (hoặc) nhị phân sao chép một bit tới kết quả nếu nó tồn tại trong

một hoặc hai toán hạng

(A | B) sẽ cho kết quả

là 61, tức là

0011

1101

^ Toán tử XOR nhị phân sao chép bit mà nó chỉ tồn tại trong một toán hạng mà

không phải cả hai

(A ^ B) sẽ cho kết quả

là 49, tức là

0011

0001

Trang 39

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 39

sẽ cho kết quả

-61, tức là

1100

0011

<< Toán tử dịch trái Giá trị toán hạng trái được dịch chuyển sang trái bởi số các

bit được xác định bởi toán hạng bên phải

A <<

2 sẽ cho kết quả

240, tức là

1111

0000 (dịch sang trái hai bit)

>> Toán tử dịch phải Giá trị toán hạng trái được dịch chuyển sang phải bởi số

các bit được xác định bởi toán hạng bên phải

A >>

2 sẽ cho kết quả

là 15, tức là

0000

1111 (dịch sang phải hai bit)

Trang 40

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí Trang 40

= C *

A

Ngày đăng: 19/09/2015, 18:18

HÌNH ẢNH LIÊN QUAN

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#: - Tài liệu Lập trình C tiếng Việt
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#: (Trang 17)
Bảng sau liệt kê các kiểu giá trị có sẵn trong C# 2010: - Tài liệu Lập trình C tiếng Việt
Bảng sau liệt kê các kiểu giá trị có sẵn trong C# 2010: (Trang 19)
Bảng dưới liệt kê các toán tử số học được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A giữ giá trị 10,  biến B giữ 20 thì: - Tài liệu Lập trình C tiếng Việt
Bảng d ưới liệt kê các toán tử số học được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A giữ giá trị 10, biến B giữ 20 thì: (Trang 34)
Bảng dưới đây liệt kê các toán tử quan hệ được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A giữ giá trị - Tài liệu Lập trình C tiếng Việt
Bảng d ưới đây liệt kê các toán tử quan hệ được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A giữ giá trị (Trang 35)
Bảng dưới đây chỉ rõ tất cả các toán tử logic được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A có giá trị - Tài liệu Lập trình C tiếng Việt
Bảng d ưới đây chỉ rõ tất cả các toán tử logic được hỗ trợ bởi ngôn ngữ C#. Giả sử biến A có giá trị (Trang 36)
Bảng dưới đây liệt kê thứ tự ưu tiên của các toán tử. Các toán tử với quyền ưu tiên cao nhất xuất  hiện trên cùng của bảng, và các toán tử có quyền ưu tiên thấp nhất thì ở bên dưới cùng của bảng - Tài liệu Lập trình C tiếng Việt
Bảng d ưới đây liệt kê thứ tự ưu tiên của các toán tử. Các toán tử với quyền ưu tiên cao nhất xuất hiện trên cùng của bảng, và các toán tử có quyền ưu tiên thấp nhất thì ở bên dưới cùng của bảng (Trang 43)
Bảng dưới miêu tả các toán tử có thể nạp chồng trong C#: - Tài liệu Lập trình C tiếng Việt
Bảng d ưới miêu tả các toán tử có thể nạp chồng trong C#: (Trang 110)
Bảng  sau  cung  cấp  một  số  lớp  Exception  tiền  định  nghĩa  được  kế  thừa  từ  lớpSytem.SystemException trong C#: - Tài liệu Lập trình C tiếng Việt
ng sau cung cấp một số lớp Exception tiền định nghĩa được kế thừa từ lớpSytem.SystemException trong C#: (Trang 135)
Bảng sau hiển thị một số lớp non-abstract được sử dụng phổ biến trong System.IO namespace  trong C#: - Tài liệu Lập trình C tiếng Việt
Bảng sau hiển thị một số lớp non-abstract được sử dụng phổ biến trong System.IO namespace trong C#: (Trang 139)
Bảng  dưới  liệt  kê  các  lớp  được  sử  dụng  phổ  biến  của System.Collection namespace - Tài liệu Lập trình C tiếng Việt
ng dưới liệt kê các lớp được sử dụng phổ biến của System.Collection namespace (Trang 185)
Bảng dưới liệt kê một số thuộc tính được sử dụng phổ biến nhất của lớp Thread trong C#: - Tài liệu Lập trình C tiếng Việt
Bảng d ưới liệt kê một số thuộc tính được sử dụng phổ biến nhất của lớp Thread trong C#: (Trang 203)
Bảng này liệt kê các phương thức được sử dụng phổ biến nhất của lớp Thread trong C#: - Tài liệu Lập trình C tiếng Việt
Bảng n ày liệt kê các phương thức được sử dụng phổ biến nhất của lớp Thread trong C#: (Trang 204)

TỪ KHÓA LIÊN QUAN

w