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.
http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Mục lục Học C# nâng cao . Đối với độc giả Điều kiện tiền đề . Tổng quan C# Các đặc điểm lập trình mạnh mẽ C# Cài đặt môi trường C# Giới thiệu .Net Framework 10 Integrated Development Environment (IDE) cho C# . 10 Viết chương trình C# Linux Mac OS 11 Cấu trúc chương trình C# . 11 Tạo chương trình Hello World C# 11 Biên dịch thực thi chương trình C# . 13 Cú pháp C# 14 Từ khóa using C# 16 Từ khóa class C# . 16 Comments C# . 16 Biến thành viên C# . 16 Hàm thành viên C# 16 Thuyết minh Class C# . 16 Định danh (Identifier) C# 17 Từ khóa C# 17 Kiểu liệu C# 18 Kiểu giá trị C# . 19 Kiểu tham chiếu C# 21 Kiểu object C# . 21 Kiểu Dynamic C# 21 Kiểu string C# 22 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Kiểu trỏ C# 22 Chuyển đổi kiểu C# 22 Phương thức chuyển đổi kiểu C# 23 Biến C# 26 Định nghĩa biến C# 27 Khởi tạo biến C# 27 Nhận giá trị từ người dùng C# 29 Biểu thức lvalue rvalue C# . 29 Hằng (Constant/Literal) C# . 29 Hằng số nguyên C# . 30 Hằng số thực C# 31 Hằng ký tự C# 31 Hằng chuỗi C# . 33 Định nghĩa C# . 33 Toán tử C# 34 Toán tử số học C# . 34 Toán tử quan hệ C# . 35 Toán tử logic C# 36 Toán tử so sánh bit C# . 37 Toán tử gán C# 40 Các toán tử hỗn hợp C# 42 Thứ tự ưu tiên toán tử C# 43 Điều khiển luồng C# . 44 Toán tử ? : C# 46 Vòng lặp C# . 46 Các lệnh điều khiển vòng lặp C# 47 Vòng lặp vô hạn C# . 47 Ví dụ 48 Tính đóng gói C# . 48 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Public Access Specifier C# 49 Private Access Specifier C# . 50 Protected Access Specifier C# . 52 Internal Access Specifier C# . 52 Protected Internal Access Specifier C# . 54 Phương thức C# 54 Định nghĩa phương thức C# 54 Ví dụ . 55 Gọi phương thức C# 56 Gọi phương thức đệ qui C# . 58 Truyền tham số cho phương thức C# 59 Nullable C# 60 Toán tử ?? C# 61 Mảng (Array) C# 62 Khai báo mảng C# . 62 Khởi tạo mảng C# 63 Gán giá trị cho mảng C# . 63 Truy cập phần tử mảng C# 64 Sử dụng vòng lặp foreach C# 65 Chi tiết mảng C# 66 Chuỗi (String) C# . 67 Tạo đối tượng String C# 67 Các thuộc tính lớp String C# 69 Phương thức lớp String C# . 69 Ví dụ . 74 Cấu trúc (Structure) C# 77 Định nghĩa cấu trúc C# 77 Đặc điểm cấu trúc C# 79 Phân biệt Class Structure C# . 80 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Enum C# . 82 Khai báo biến enum C# . 82 Ví dụ . 83 Lớp (Class) C# . 83 Định nghĩa Class C# . 84 Hàm thành viên tính đóng gói C# 86 Constructor C# . 88 Destructor C# . 91 Thành viên Static Class C# . 92 Tính kế thừa C# . 95 Lớp sở (Base Class) Lớp thừa kế (Derived Class) C# . 95 Khởi tạo Lớp sở (Base Class) C# . 97 Đa kế thừa C# . 99 Tính đa hình C# . 101 Đa hình static C# 101 Nạp chồng hàm C# 102 Đa hình dynamic C# 103 Nạp chồng toán tử C# 107 Triển khai Nạp chồng toán tử C# . 107 Toán tử nạp chồng nạp chồng C# 110 Ví dụ . 111 Interface C# . 117 Khai báo Interface C# 117 Ví dụ . 117 Namespace C# 120 Định nghĩa Namespace C# . 120 Từ khóa using C# 121 Lồng Namespace C# . 123 Chỉ thị tiền xử lý C# 125 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Các thị tiền xử lý C# 125 Chỉ thị tiền xử lý #define C# 126 Chỉ thị có điều kiện (Conditional Directive) C# . 127 Regular Expression C# 128 Construct cho định nghĩa Regular Expression C# 128 Lớp Regex C# . 129 Ví dụ 130 Ví dụ 131 Ví dụ 132 Xử lý ngoại lệ (Exception Handling) C# 133 Cú pháp 134 Lớp Exception C# 135 Xử lý ngoại lệ ( Exception Handling) C# . 136 Tạo User-Defined Exception C# 137 Ném Object C# 139 File I/O C# 139 Lớp I/O C# . 139 Lớp FileStream C# . 140 Ví dụ . 142 Hoạt động File nâng cao C# 143 Attribute C# 143 Xác định Attribute C# 144 Attribute định nghĩa trước C# 144 AttributeUsage C# 144 Conditional C# . 145 Obsolete C# . 147 Tạo Custom Attribute C# 148 Khai báo Custom Attribute C# . 149 Xây dựng Custom Attribute C# 149 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Áp dụng Custom Attribute C# 151 Reflection C# . 152 Các ứng dụng Reflection 152 Quan sát Metadata C# . 153 Ví dụ . 155 Thuộc tính (Property) C# 159 Accessor C# 160 Ví dụ . 161 Thuộc tính trừu tượng C# 164 Indexer C# . 166 Cú pháp 167 Sự sử dụng Indexer C# . 167 Nạp chồng Indexer C# . 170 Delegate C# . 173 Khai báo Delegate C# 173 Khởi tạo Delegate C# . 173 Multicast Delegate C# . 175 Cách sử dụng Delegate C# . 177 Sự kiện (Event) C# 178 Sử dụng Delegate với Event C# 179 Khai báo Event C# . 179 Ví dụ 179 Ví dụ 181 Collection C# 185 Các lớp Collection cách sử dụng chúng C# 185 Generic C# 186 Đặc điểm Generic C# 189 Các phương thức Generic C# . 190 Generic Delegate C# . 191 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Phương thức nặc danh C# 193 Viết Phương thức nặc danh C# 193 Ví dụ . 194 Unsafe code C# . 195 Con trỏ (Pointer) C# . 196 Thu hồi giá trị liệu sử dụng trỏ C# . 197 Truyền Con trỏ Tham số tới phương thức C# . 198 Truy cập phần tử mảng sử dụng trỏ C# . 199 Biên dịch Unsafe Code C# . 200 Đa luồng (Multithread) C# 201 Vòng đời Thread C# 201 Main Thread C# . 202 Thuộc tính Phương thức lớp Thread C# . 203 Tạo Thread C# 208 Quản lý Thread C# 209 Hủy Thread C# 210 Tài liệu tham khảo C# . 212 Link hữu ích C# 212 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Học C# nâng cao C# ngôn ngữ lập trình đơn giản, đại, mục đích tổng quát, hướng đối tượng phát triển Microsoft bên phần khởi đầu .NET họ, phát triển chủ yếu Anders Hejlsberg, kiến trúc sư phần mềm tiếng với sản phẩm Turbo Pascal, Delphi, J++, WFC. Loạt hướng dẫn cung cấp cho bạn kiến thức lập trình C# qua khái niệm từ đến nâng cao liên quan tới ngôn ngữ lập trình C#. Loạt hướng dẫn dựa nguồn tài liệu của: Tutorialspoint Đối với độc giả Loạt hướng dẫn xây dựng cho người học để giúp họ hiểu khái niệm lập trình C#. Điều kiện tiền đề Ngôn ngữ lập trình C# dựa ngôn ngữ lập trình C C++, thế, bạn hiểu C C++, điều giúp bạn học tập C# dễ dàng hơn. Tổng quan C# C# ngôn ngữ lập trình đơn giản, đại, mục đích tổng quát, hướng đối tượng phát triển Microsoft phê chuẩn European Computer Manufacturers Association (ECMA) International Standards Organization (ISO). C# phát triển Anders Hejlsberg team ông phát triển .Net Framework. C# thiết kế cho Common Language Infrastructure (CLI), mà gồm Executable Code Runtime Environment, cho phép sử dụng ngôn ngữ high-level đa dạng tảng cấu trúc máy tính khác nhau. Dưới lý làm C# ngôn ngữ lập trình chuyên nghiệp sử dụng rộng rãi: Nó ngôn ngữ lập trình đại, mục đích tổng quát. Nó hướng đối tượng. http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Nó dễ dàng để học. Nó ngôn ngữ cấu trúc. Nó tạo chương trình hiệu quả. Nó biên dịch nhiều tảng máy tính khác nhau. Nó phần .Net Framework. Các đặc điểm lập trình mạnh mẽ C# Cấu trúc C# gần với ngôn ngữ high-level truyền thống, C C++, ngôn ngữ lập trình hướng đối tượng. Nó có giống mạnh mẽ với Java, có nhiều đặc điểm lập trình mạnh mẽ mà làm cho trở nên ưa thích với lập trình viên toàn giới. Dưới đặc điểm quan trọng C#: Điều kiện Boolean Tự động dọn rác Garbage-Collector (GC) Thư viện chuẩn (Standard Library) Assembly Property kiện (Event) Delegate Quản lý 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 Lambda Expression Tích hợp với Windows Cài đặt môi trường C# Trong chương này, giới thiệu công cụ cần thiết để cài đặt môi trường C#. Chúng đề cập C# phần .Net Framework sử dụng để viết ứng dụng .Net. Vì thế, trước thảo luận công cụ có sẵn để chạy chương trình C#, bạn nên hiểu cách C# liên quan tới .Net Framework. http://vietjack.com/ Trang chia sẻ học online miễn phí Trang http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Giới thiệu .Net Framework .Net Framework tảng mang tính cách mạng giúp bạn viết kiểu ứng dụng sau: Windows application Web application Dịch vụ Web Các ứng dụng .Net Framework ứng dụng đa tảng. Nền tảng thiết kế theo cách sử dụng từ ngôn ngữ lập trình nào: C#, C++, Visual Basic, Jscript, COBOL, …. Tất ngôn ngữ truy cập tới tảng giao tiếp với nhau. .Net Framework gồm thư viện code khổng lồ sử dụng ngôn ngữ client C#. Dưới số thành phần .Net Framework. Common Language Runtime (CLR) .Net Framework Class Library Common Language Specification Common Type System Metadata Assembly Windows Form ASP.Net 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ô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 http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 10 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } Khi code biên dịch thực thi, cho kết quả: Data is: 20 Address is: 99215364 Thay cho việc khai báo toàn phương thức dạng unsafe, bạn khai báo phần code dạng unsafe. Thu hồi giá trị liệu sử dụng trỏ C# Bạn thu hồi liệu lưu giữ vị trí tham chiếu biến trỏ, sử dụng phương thức ToString() C#. Đây ví dụ minh họa: using System; namespace UnsafeCodeApplication { class Program { public static void Main() { unsafe { int var = 20; int* p = &var; Console.WriteLine("Data is: {0} " , var); Console.WriteLine("Data is: {0} " , p->ToString()); Console.WriteLine("Address is: {0} " , (int)p); } Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 197 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Data is: 20 Data is: 20 Address is: 77128984 Truyền Con trỏ Tham số tới phương thức C# Bạn truyền biến trỏ tới phương thức dạng tham số. Đây ví dụ minh họa: using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe void swap(int* p, int *q) { int temp = *p; *p = *q; *q = temp; } public unsafe static void Main() { TestPointer p = new TestPointer(); int var1 = 10; int var2 = 20; int* x = &var1; int* y = &var2; Console.WriteLine("Before Swap: var1:{0}, var2: {1}", var1, var2); p.swap(x, y); Console.WriteLine("After Swap: var1:{0}, var2: {1}", var1, var2); Console.ReadKey(); http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 198 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } } } Khi code biên dịch thực thi, cho kết quả: Before Swap: var1: 10, var2: 20 After Swap: var1: 20, var2: 10 Truy cập phần tử mảng sử dụng trỏ C# Trong C#, tên mảng trỏ tới kiểu liệu dạng liệu mảng, không kiểu biến. Ví dụ, int *p int[] p, không kiểu. Bạn lượng gia biến trỏ p không cố định nhớ, địa mảng cố định nhớ, bạn lượng gia nó. Vì thế, bạn cần truy cập liệu mảng sử dụng biến trỏ, làm C C++ (bạn kiểm tra: Con trỏ C), bạn cần cố định trỏ sử dụng từ khóa fixed C#. Sau ví dụ minh họa: using System; namespace UnsafeCodeApplication { class TestPointer { public unsafe static void Main() { int[] list = {10, 100, 200}; fixed(int *ptr = list) /* let us have array address in pointer */ for ( int i = 0; i < 3; i++) { Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i)); http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 199 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i)); } Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: Address of list[0] = 31627168 Value of list[0] = 10 Address of list[1] = 31627172 Value of list[1] = 100 Address of list[2] = 31627176 Value of list[2] = 200 Biên dịch Unsafe Code C# Để biên dịch Unsafe Code, bạn phải xác định /unsafe command-line. Ví dụ, để biên dịch chương trình có tên prog1.cs chứa unsafe code, từ command-line, bạn cung cấp lệnh sau C#: csc /unsafe prog1.cs Nếu bạn sử dụng Visual Studio IDE, bạn cần kích hoạt sử dụng unsafe code project properties. Để làm điều này: Mở project properties việc nhấn đúp chuột vào properties node Solution Explorer. Nhấn vào Build tab. Chọn tùy chọn "Allow unsafe code". Như ình ảnh sau: http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 200 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Đa luồng (Multithread) C# Một thread định nghĩa đường truyền thực thi (execution path) chương trình. Mỗi Thread định nghĩa dòng điều khiển nhất. Nếu application bạn gồm hoạt động phức tạp tốn thời gian, thường hữu ích thiết lập execution path Thread, với Thread thực công việc cụ thể. Các Thread tiến trình nhẹ. Một ví dụ phổ biến sử dụng Thread triển khai lập trình tương tranh (concurrent programming) hệ điều hành đại. Sử dụng Thread tiếp kiệm hao phí CPU cycle tăng hiệu application. Tới chương này, viết chương trình mà Thread đơn chạy tiến trình đơn, trình chạy thể application. Tuy nhiên, theo cách này, application thực công việc thời điểm. Để làm thực thi nhiều tác vụ thời điểm, phân chia thành Thread nhỏ hơn. Vòng đời Thread C# Vòng đời Thread bắt đầu đối tượng lớp System.Threading.Thread tạo kết thúc Thread kết thúc hoàn thành việc thực thi. http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 201 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Dưới trạng thái đa dạng vòng đời Thread C#: Unstarted State: Nó tình instance Thread tạo, phương thức Start chưa gọi. Ready State: Nó tình Thread sẵn sàng để chạy đợi CPU cycle. Not Runnable State: Một Thread thực thi (not executable), khi: o Phương thức Sleep gọi. o Phương thức Wait gọi. o Bị ngăn chặn hoạt động I/O. Dead State: Nó tình Thread hoàn thành thực thi bị hủy bỏ. Main Thread C# Trong C#, lớp System.Threading.Thread sử dụng để làm việc với Thread. Nó cho phép tạo truy cập Thread riêng biệt Multithreaded Application. Thread để thực thi tiến trình gọi Main Thread C#. Khi chương trình C# bắt đầu thực thi, Main Thread tự động tạo ra. Các Thread, tạo sử dụng lớp Thread, gọi Thread Main Thread. Bạn truy cập Thread sử dụng thuộc tính CurrentThread lớp Thread. Dưới chương trình ví dụ minh họa cho thực thi Main Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class MainThreadProgram { static void Main(string[] args) { Thread th = Thread.CurrentThread; th.Name = "MainThread"; http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 202 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Console.WriteLine("This is {0}", th.Name); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: This is MainThread Thuộc tính Phương thức lớp Thread C# Bảng liệt kê số thuộc tính sử dụng phổ biến lớp Thread C#: Thuộc tính Miêu tả CurrentContext Lấy ngữ cảnh (context) mà Thread thực thi CurrentCulture Lấy thiết lập culture gồm language, date, time, currency, … cho Thread CurrentPrinciple Lấy thiết lập nguyên lý Thread CurrentThread Lấy Thread chạy CurrentUICulture Lấy thiết lập culture sử dụng Resource Manager để tìm kiếm cho Resource cụ thể runtime ExecutionContext Lấy đối tượng ExecutionContext mà chứa thông tin context đa dạng Thread IsAlive Lấy giá trị trạng thái thực thi Thread IsBackground Lấy thiết lập giá trị có hay không Thread http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 203 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Background Thread IsThreadPoolThread Lấy giá trị có hay không Thread Managed Thread Pool ManagedThreadId Lấy định danh cho Managed Thread Name Lấy thiết lập tên Thread Priority Lấy thiết lập giá trị quyền ưu tiên Thread ThreadState Lấy giá trị chứa trạng thái Thread Bảng liệt kê phương thức sử dụng phổ biến lớp Thread C#: STT Phương thức public void Abort() Tạo ThreadAbortException Thread mà triệu hồi, để bắt đầu tiến trình kết thúc Thread đó. Gọi phương thức thường kết thúc Thread public static LocalDataStoreSlot AllocateDataSlot() Cấp phát Unnamed Data Slot cho tất Thread. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static LocalDataStoreSlot AllocateNamedDataSlot(string name) Cấp phát Named Data Slot cho tất Thread. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static void BeginCriticalRegion() Thông báo cho host thực thi chuẩn bị vào khu vực code, mà http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 204 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com ảnh hưởng việc hủy bỏ Thread Exception không xử lý gây nguy hại tới tác vụ khác miền ứng dụng public static void BeginThreadAffinity() Thông báo cho Host Managed code chuẩn bị thực thi lệnh mà phụ thuộc vào tính đồng Physical operating system thread public static void EndCriticalRegion() Thông báo cho host thực thi chuẩn bị vào khu vực code, mà ảnh hưởng hủy bỏ Thread Exception không xử lý bị hạn chế tới tác vụ public static void EndThreadAffinity() Thông báo cho Host Managed code kết thúc việc thực thi lệnh mà phụ thuộc vào tính đồng Physical Operating System Thread public static void FreeNamedDataSlot(string name) Loại bỏ liên kết name slot, cho tất Thread tiến trình. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay public static Object GetData(LocalDataStoreSlot slot) Thu hồi giá trị từ slot xác định Thread tại, bên miền Thread tại. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 10 public static AppDomain GetDomain() Trả miền Thread chạy 11 public static AppDomain GetDomain() http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 205 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Trả định danh miền ứng dụng 12 public static LocalDataStoreSlot GetNamedDataSlot(string name) Tìm kiếm Named Data Slot. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 13 public void Interrupt() Interrupt (ngắt) Thread mà trạng thái WaitSleepJoin 14 public void Join() Chặn Thread gọi tới Thread kết thúc, tiếp tục thực COM SendMessage Pumping. Phương thức có mẫu nạp chồng khác 15 public static void MemoryBarrier() Đồng truy cập nhớ sau: Prosessor thực thi Thread xếp lại lệnh theo cách quyền truy cập nhớ tới lời gọi đến MemoryBarrier thực thi sau truy cập nhớ mà theo sau lời gọi đến MemoryBarrier 16 public static void ResetAbort() Hủy Abort yêu cầu cho Thread 17 public static void SetData(LocalDataStoreSlot slot, Object data) Thiết lập liệu slot cho Thread chạy tại, cho miền Thread đó. Để tăng hiệu suất, sử dụng Field mà đánh dấu với attribute ThreadStaticAttribute để thay 18 public void Start() Bắt đầu Thread http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 206 http://vietjack.com/csharp/index.jsp 19 Copyright © vietjack.com public static void Sleep(int millisecondsTimeout) Làm Thread dừng khoảng thời gian 20 public static void SpinWait(int iterations) Làm Thread đợi khoảng thời gian xác định tham số iterations 21 public static byte VolatileRead(ref byte address) public static double VolatileRead(ref double address) public static int VolatileRead(ref int address) public static Object VolatileRead(ref Object address) Đọc giá trị Field. Giá trị viết Prosessor máy tính, không quan tâm đến số lượng Prosessor trạng thái Prosessor Cache. Phương thức có mẫu nạp chồng khác nhau. Đó form 22 public static void VolatileWrite(ref byte address,byte value) public static void VolatileWrite(ref double address, double value) public static void VolatileWrite(ref int address, int value) public static void VolatileWrite(ref Object address, Object value) Ghi giá trị tới Field lập tức, giá trị nhìn thấy cho tất Processor máy tính. Phương thức có mẫu nạp chồng khác nhau. Đó form 23 public static bool Yield() Làm Thread gọi chuyển thực thi cho Thread khác mà sẵn sàng để chạy Processor tại. Hệ điều hành chọn Thread để chuyển tới http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 207 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Tạo Thread C# Trong C#, Thread tạo việc kế thừa lớp Thread. Sau đó, Lớp Thread kế thừa gọi phương thức Start() để bắt đầu thực thi Thread con. Sau ví dụ minh họa việc tạo Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } } Khi code biên dịch thực thi, cho kết quả: In Main: Creating the Child thread Child thread starts http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 208 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Quản lý Thread C# Lớp Thread C# cung cấp phương thức đa dạng để quản lý Thread. Ví dụ sau minh họa cách sử dụng phương thức sleep() để làm Thread dừng khoảng thời gian cụ thể. using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { Console.WriteLine("Child thread starts"); // the thread is paused for 5000 milliseconds int sleepfor = 5000; Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000); Thread.Sleep(sleepfor); Console.WriteLine("Child thread resumes"); } static void Main(string[] args) { ThreadStart childref = new ThreadStart(CallToChildThread); Console.WriteLine("In Main: Creating the Child thread"); Thread childThread = new Thread(childref); childThread.Start(); Console.ReadKey(); } } http://vietjack.com/ Trang chia sẻ học online miễn phí Trang 209 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com } Khi code biên dịch thực thi, cho kết quả: In Main: Creating the Child thread Child thread starts Child Thread Paused for seconds Child thread resumes Hủy Thread C# Phương thức Abort() sử dụng để hủy Thread C#. Trong thời gian runtime, chương trình hủy bỏ Thread việc ném mộtThreadAbortException. Exception bắt, điều khiển gửi tới khốifinally, không. Dưới chương trình minh họa việc sử dụng phương thức Abort() để hủy bỏ Thread C#: using System; using System.Threading; namespace MultithreadingApplication { class ThreadCreationProgram { public static void CallToChildThread() { try { Console.WriteLine("Child thread starts"); // some work, like counting to 10 for (int counter = 0; counter [...]... 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ư...http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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... 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”: http://vietjack.com/... trong C# Một biến là không gì kh c ngoài một tên đư c cung c p cho khu v c lưu giữ mà chương trình c thể thao t c Mỗi biến trong C# c một kiểu c thể, mà quyết định kích c và c ch bố trí bộ nhớ c a biến đó, c ch dãy giá trị c thể đư c lưu giữ trong bộ nhớ đó, và c ch tập hợp c c hoạt động c thể đư c áp dụng tới biến đó C c kiểu giá trị c bản trong C# c thể đư c phân chia thành: Kiểu Ví dụ Kiểu Integral... 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 http://vietjack.com/ Trang chia sẻ c c bài h c online miễn phí Trang 20 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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... 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ở http://vietjack.com/ Trang chia sẻ c c bài h c online miễn phí Trang 22 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Chuyển đổi kiểu tường minh (explicit) - Vi c chuyển đổi này đư c th c hiện... đư 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# ... 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... */ 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... 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 http://vietjack.com/ Trang chia sẻ c c bài h c online miễn phí Trang 23 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com Chuyển đổi một kiểu thành . trong C# 189 C c phương th c Generic trong C# 190 Generic Delegate trong C# 191 http://vietjack.com/csharp/index.jsp Copyright © vietjack.com http://vietjack.com/ Trang chia sẻ c c bài h c. 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. http://vietjack.com/csharp/index.jsp Copyright © vietjack.com 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ả