Học Nhanh C# Cho Người Mới Bắt đầu - Openplanning
Có thể bạn quan tâm
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- Giới thiệu
- Tạo Project C# đầu tiên của bạn
- Giải thích cấu trúc của một class
- Giải thích cấu trúc Project
- Chú ý quan trọng với một chương trình C#
- Thêm mới class
- Các kiểu dữ liệu trong C#
- Biến và khai báo
- Câu lệnh rẽ nhánh
- Vòng lặp trong C#
- Mảng trong C#
- Class, Constructor và đối tượng
- Trường (Field)
- Phương thức (Method)
- Thừa kế trong C#
- Thừa kế và đa hình trong C#
1. Giới thiệu
Đây là tài liệu hướng dẫn học C# cho người mới bắt đầu. Để lập trình C# bạn phải cài đặt công cụ lập trình Visual Studio. Bạn có thể xem hướng dẫn download và cài đặt tại:- Bắt đầu với C# cần những gì?
2. Tạo Project C# đầu tiên của bạn
Đây là hình ảnh đầu tiên khi bạn mở Visual Studio.
Tạo mới một Project:
Chúng ta tạo một Project đơn giản (Ứng dụng Console, là ứng dụng không có giao diện). Nhập vào:- Name: HelloCSharp
- Solution: Create new solution
- Solution Name: MySolution
Đây là hình ảnh Project của bạn đã được tạo ra. Bạn cần nhấn vào Solution Explorer để xem cấu trúc của Project vừa được tạo ra đó.
Visual Studio tạo ra một Solution (Giải pháp) có tên là MySolution và chứa bên trong nó là một Project có tên HelloCSharp. Và tạo mặc định một lớp có tên Program (Ứng với file Program.cs).Chú ý: Một Solution (Giải pháp) có thể có một hoặc nhiều Project.
Sửa code của lớp Program, để khi chạy nó in ra màn hình Console một dòng chữ "Hello CSharp", và chờ đợi người dùng nhập vào một dòng văn bản bất kỳ trước khi kết thúc.Nhấn vào Start để chạy lớp Program.

3. Giải thích cấu trúc của một class
Hình minh họa dưới đây là cấu trúc của lớp Program, nó nằm trong không gian tên (namespace) HelloCSharp. Một không gian tên có thể chứa một hoặc nhiều lớp.
Nếu bạn muốn sử dụng một lớp nào đó, bạn phải khai báo sử dụng lớp đó, hoặc khai báo sử dụng không gian tên (namespace) chứa lớp đó.// Khai báo sử dụng không gian tên (namespace) System. // (Nghĩa là có thể sử dụng tất cả các lớp,.. có trong namespace này). using System;Khi chương trình được chạy, phương thức Main(string[]) sẽ được gọi thực thi. - static là từ khóa thông báo rằng đây là phương thức tĩnh.
- void là từ khóa thông báo rằng phương thức này không trả về gì cả.
- args là tham số của phương thức nó là một mảng các string (chuỗi) - string[].
4. Giải thích cấu trúc Project
Một giải pháp (Solution) có thể chứa trong nó nhiều Project. Trong các Project chứa các lớp (class).
Khi nhìn trên "Class view" bạn có thể thấy được các lớp của bạn thuộc vào không gian tên (namespace) nào.
Trong CSharp bạn tạo ra một lớp Animal với không gian tên là HelloCSharp, lớp này mặc định sẽ nằm tại thư mục gốc của project. Bạn tạo ra một lớp khác là MyClass với không gian tên là O7planning.CSharp, lớp này cũng nằm tại thư mục gốc của project. Với một project lớn có nhiều class, cách tổ chức các file như vậy gây khó khăn cho bạn. Bạn có thể tạo ra các thư mục khác nhau để chứa các class, quy tắc do bạn quyết định, tuy nhiên tốt nhất bạn tạo ra các thư mục có tên là tên của namespace. Hãy học tập cách tổ chức của Java.
5. Chú ý quan trọng với một chương trình C#
Trong một ứng dụng C# bạn cần khai báo rõ ràng một lớp có phương thức Main(string[]) dùng làm điểm bắt đầu để chạy ứng dụng của bạn, điều này không bắt buộc nếu toàn bộ ứng dụng của bạn có duy nhất một lớp có phương thức Main(string[]), nhưng trong trường hợp có 2 lớp có phương thức Main nếu bạn không chỉ định rõ, một thông báo lỗi sẽ xuất hiện ra trong quá trình biên dịch. Vì vậy tốt nhất bạn hãy khai báo rõ ràng lớp có phương thức Main(string[]), bạn có thể khai báo lại cho một lớp khác nếu muốn.Nhấn phải chuột vào HelloCSharp project, chọn Properties:
Chọn "Startup object" là một lớp có phương thức Main(string[]) và Save lại.
6. Thêm mới class
Bây giờ tôi thêm mới một lớp có tên MyClass với không gian tên O7planning.CSharp.Trên "Solution Explorer" nhấn phải chuột vào project chọn:- Add/New Folder
Đặt tên cho thư mục là O7planning.
Tiếp tục tạo một thư mục "CSharp" là con của thư mục "O7planning".
Nhấn phải chuột vào thư mục "CSharp" chọn:- Add/Class
Chọn kiểu item là Class, và nhập tên lớp.
Lớp đã được tạo ra, nó nằm trong không gian tên "HelloCSharp.O7planning.CSharp". Bạn có thể đổi tên cho namespace thành "O7planning.CSharp".
Đổi tên namespace thành "O7planning.CSharp".
Bạn có thể thay đổi nội dung của lớp:MyClass.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace O7planning.CSharp { class MyClass { static void Main(string[] args) { Console.WriteLine("Hello from MyClass"); Console.ReadLine(); } } }Khai báo lớp MyClass là điểm bắt đầu để chạy. Nhấn phải chuột vào Project chọn Properties
Chạy ví dụ:
7. Các kiểu dữ liệu trong C#
| Kiểu | Mô tả | Phạm vi | Giá trị mặc định |
| bool | Giá trị Boolean (Đúng hoặc sai). | True hoặc False | False |
| byte | Số tự nhiên không dấu 8-bit | 0 tới 255 | 0 |
| char | Ký tự unicode 16-bit | U +0000 tới U +ffff | '\0' |
| decimal | Có độ chính xác đến 28 con số và giá trị thập phân (Sử dụng 128-bit) | (-7.9 x 1028 tới 7.9 x 1028) / 100 tới 28 | 0.0M |
| double | Kiểu dấu chấm động có độ chính xác gấp đôi (Sử dụng 64-bit) | (+/-)5.0 x 10-324 tới (+/-)1.7 x 10308 | 0.0D |
| float | Kiểu dấu chấm động (Sử dụng 32-bit) | -3.4 x 1038 to + 3.4 x 1038 | 0.0F |
| int | Số nguyên có dấu 32-bit | -2,147,483,648 tới 2,147,483,647 | 0 |
| long | 64-bit signed integer type | -923,372,036,854,775,808 tới 9,223,372,036,854,775,807 | 0L |
| sbyte | Số nguyên có dấu 8-bit | -128 tới 127 | 0 |
| short | Số nguyên có dấu 16-bit | -32,768 tới 32,767 | 0 |
| uint | Số nguyên không dấu 32-bit | 0 tới 4,294,967,295 | 0 |
| ulong | Số nguyên không dấu 64-bit | 0 tới 18,446,744,073,709,551,615 | 0 |
| ushort | Số nguyên không dấu 16-bit | 0 tới 65,535 | 0 |
8. Biến và khai báo
Một biến xác định bởi một cái tên cho một nơi lưu trữ dữ liệu mà chương trình của bạn có thể thao tác. Mỗi biến trong C# có một kiểu dữ liệu cụ thể, trong đó xác định kích thước và phạm vi giá trị có thể được lưu trữ trong bộ nhớ, và tập hợp các toán tử có thể áp dụng cho biến.Biến có thể thay đổi giá trị trong quá trình tồn tại của nó trong chương trình. Các biến có giá trị cố định được gọi là các hằng số. Sử dụng từ khóa const để khai báo một biến là hằng số.Khai báo một biến:// Khai báo một biến // Data Type: Kiểu dữ liệu. // Variable Name: Tên biến. <Data Type> <Variable name>; // Khai báo một biến và gán giá trị cho nó. <Data Type> <Variable name> = <value>; // Khai báo một hằng số (constants) const <Data Type> <Variable name> = <value>;VariableExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class VariableExample { static void Main(string[] args) { // Khai báo một hằng số có kiểu int. // Bạn không thể giá giá trị mới cho hằng số. const int MAX_SCORE = 100; // Khai báo một biến có kiểu int. int score = 0; // Gán giá trị mới cho biến score. score = 90; // Khai báo một chuỗi (string). string studentName = "Tom"; // In giá trị của biến ra màn hình Console. Console.WriteLine("Hi {0}", studentName); Console.WriteLine("Your score: {0}/{1}", score, MAX_SCORE); // Chờ người dùng nhập vào gì đó và nhấn Enter trước khi kết thúc chương trình. Console.ReadLine(); } } }Kết quả chạy ví dụ:
9. Câu lệnh rẽ nhánh
Câu lệnh If-elseif là một câu lệnh kiểm tra một điều kiện gì đó trong C#. Chẳng hạn: Nếu a > b thì làm gì đó ....Các toán tử so sánh thông dụng:| Toán tử | Ý nghĩa | Ví dụ |
| > | Lớn hơn | 5 > 4 là đúng (true) |
| < | Nhỏ hơn | 4 < 5 là đúng (true) |
| >= | Lớn hơn hoặc bằng | 4 >= 4 là đúng (true) |
| <= | Nhỏ hơn hoặc bằng | 3 <= 4 là đúng (true) |
| == | Bằng nhau | 1 == 1 là đúng (true) |
| != | Không bằng nhau | 1 != 2 là đúng (true) |
| && | Và | a > 4 && a < 10 |
| || | Hoặc | a == 1 || a == 4 |
Câu lệnh Switch-CaseCú pháp câu lệnh rẽ nhánh switch:// Sử dụng từ khóa 'switch' để kiểm tra giá trị của một biến. switch ( <variable> ) { case value1: // Làm gì đó tại đây nếu giá trị của biến bằng value1. break; case value2: // Làm gì đó tại đây nếu giá trị của biến bằng value2. break; ... default: // Các trường hợp còn lại. break; }BreakExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class BreakExample { static void Main(string[] args) { // Đề nghị người dùng chọn 1 lựa chọn. Console.WriteLine("Please select one option:\n"); Console.WriteLine("1 - Play a game \n"); Console.WriteLine("2 - Play music \n"); Console.WriteLine("3 - Shutdown computer \n"); // Khai báo một biến option int option; // Chuỗi người dùng nhập vào từ bàn phím string inputStr = Console.ReadLine(); // Chuyển chuỗi thành số nguyên. option = Int32.Parse(inputStr); // Kiểm tra giá trị của 'option'. switch (option) { case 1: Console.WriteLine("You choose to play the game"); break; case 2: Console.WriteLine("You choose to play the music"); break; case 3: Console.WriteLine("You choose to shutdown the computer"); break; default: Console.WriteLine("Nothing to do..."); break; } Console.ReadLine(); } } }Chạy ví dụ và nhập vào 2:
Lệnh break trong trường hợp này nói với chương trình rằng thoát ra khỏi switch.Bạn có thể gộp nhiều trường hợp (case) để thực thi cùng một khối lệnh.BreakExample2.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class BreakExample2 { static void Main(string[] args) { // Khai báo biến option và gán giá trị 3 cho nó. int option = 3; Console.WriteLine("Option = {0}", option); // Kiểm tra giá trị của 'option'. switch (option) { case 1: Console.WriteLine("Case 1"); break; // Trường hợp option = 2,3,4,5 xử lý giống nhau. case 2: case 3: case 4: case 5: Console.WriteLine("Case 2,3,4,5!!!"); break; default: Console.WriteLine("Nothing to do..."); break; } Console.ReadLine(); } } }Kết quả chạy ví dụ:

10. Vòng lặp trong C#
Vòng lặp (loop) được sử dụng để chạy lặp lại một khối lệnh. Nó làm chương trình của bạn thực thi lặp đi lặp lại một khối lệnh nhiều lần, đây là một trong các nhiệm vụ cơ bản trong lập trình.C# hỗ trợ 3 loại vòng lặp khác nhau:- FOR
- WHILE
- DO WHILE
Vòng lặp whileCú pháp của vòng lặp while:// condition: Điều kiện while (condition) { // Trong khi 'condition' là đúng, thì thực thi khối lệnh. }Ví dụ:// Khai báo một biến x. int x = 2; while ( x < 10) { // Làm gì đó tại đây khi x < 10 còn đúng. ... // Cập nhập giá trị mới cho biến x. x = x + 3; }WhileLoopExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class WhileLoopExample { static void Main(string[] args) { Console.WriteLine("While loop example"); // Tạo một biến x và gán giá trị 2 cho nó. int x = 2; // Điều kiện là x < 10. // Nếu x < 10 đúng thì khối lệnh được thực thi. while (x < 10) { Console.WriteLine("Value of x = {0}", x); x = x + 3; } Console.ReadLine(); } } }Kết quả chạy ví dụ:
Vòng lặp do-whileCú pháp của vòng lặp do-while// Đặc điểm của vòng lặp 'do-while' là nó sẽ thực khi khối lệnh ít nhất 1 lần. // Sau mỗi bước lặp (iteration), nó sẽ kiểm tra lại điều kiện, // Nếu điều kiện đúng, khối lệnh sẽ được thực thi tiếp. do { // Làm gì đó tại đây. } while (condition); // Chú ý: Cần có dấu chấm phẩy (;) tại đây.DoWhileLoopExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class DoWhileLoopExample { static void Main(string[] args) { Console.WriteLine("Do-While loop example"); // Tạo một biến x và gán giá trị 2 cho nó. int x = 2; // Thực hiện khối lệnh ít nhất 1 lần. // Sau mỗi bước lặp (iteration), nó sẽ kiểm tra lại điều kiện, // Nếu điều kiện đúng, khối lệnh sẽ được thực thi tiếp. do { Console.WriteLine("Value of x = {0}", x); x = x + 3; } while (x < 10); // Chú ý: Cần có dấu chấm phẩy tại đây. Console.ReadLine(); } } }Kết quả chạy ví dụ:
Lệnh break trong vòng lặpbreak là một lệnh nó có thể nằm trong một khối lệnh của một vòng lặp. Đây là lệnh kết thúc vòng lặp vô điều kiện.
LoopBreakExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class LoopBreakExample { static void Main(string[] args) { Console.WriteLine("Break example"); // Tạo một biến x và gán giá trị 2 cho nó. int x = 2; while (x < 15) { Console.WriteLine("----------------------\n"); Console.WriteLine("x = {0}", x); // Kiểm tra nếu x = 5 thì thoát ra khỏi vòng lặp. if (x == 5) { break; } // Tăng giá trị của x lên 1 (Viết ngắn gọn cho x = x + 1;). x++; Console.WriteLine("x after ++ = {0}", x); } Console.ReadLine(); } } }Kết quả chạy ví dụ:
Lệnh continue trong vòng lặpcontinue là một lệnh, nó có thể nằm trong một vòng lặp, khi bắt gặp lệnh continue chương trình sẽ bỏ qua các dòng lệnh trong khối phía dưới của continue và bắt đầu một vòng lặp mới.
LoopContinueExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class LoopContinueExample { static void Main(string[] args) { Console.WriteLine("Continue example"); // Tạo một biến x và gán giá 2 cho nó. int x = 2; while (x < 7) { Console.WriteLine("----------------------\n"); Console.WriteLine("x = {0}", x); // Toán tử % là phép chia lấy số dư. // Nếu x chẵn, thì bỏ qua các dòng lệnh phía dưới của 'continue', // và tiếp tục bước lặp (iteration) mới (nếu điều kiện vẫn đúng). if (x % 2 == 0) { // Tăng giá trị của x lên 1 (Viết ngắn gọn cho x = x + 1;). x++; continue; } else { // Tăng giá trị của x lên 1 (Viết ngắn gọn cho x = x + 1;). x++; } Console.WriteLine("x after ++ = {0}", x); } Console.ReadLine(); } } }Kết quả chạy ví dụ:
11. Mảng trong C#
Mảng một chiềuĐây là hình minh họa về mảng một chiều có 5 phần tử, các phần tử được đánh chỉ số từ 0 tới 4.
Cú pháp khai báo mảng một chiều:// Cách 1: // Khai báo một mảng các số int, chỉ định giá trị cho các phần tử. int[] years = { 2001, 2003, 2005, 1980, 2003 }; // Cách 2: // Khai báo một mảng các số float, chỉ rõ số phần tử. // (3 phần tử). float[] salaries = new float[3];ArrayExample1.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class ArrayExample1 { static void Main(string[] args) { // Cách 1: // Khai báo một mảng, chỉ định giá trị cho các phần tử. int[] years = { 2001, 2003, 2005, 1980, 2003 }; // Length là một Property của mảng, nó trả về số phần tử của mảng. Console.WriteLine("Element count of array years = {0} \n", years.Length); // Sử dụng vòng lặp for để in ra các phần tử của mảng. for (int i = 0; i < years.Length; i++) { Console.WriteLine("Element at {0} = {1}", i, years[i]); } // Cách 2: // Khai báo một mảng có 3 phần tử. float[] salaries = new float[3]; // Gán các giá trị cho các phần tử. salaries[0] = 1000; salaries[1] = 1200; salaries[2] = 1100; Console.ReadLine(); } } }Kết quả chạy ví dụ:
Mảng hai chiềuĐây là hình minh họa một mảng 2 chiều
Cú pháp khai báo một mảng 2 chiều:// Khai báo một mảng 2 chiều, 3 dòng & 5 cột. // Chỉ định giá trị cho các phần tử. int[,] a = new int[,] { {1 , 2 , 3, 4, 5} , {0, 3, 4, 5, 7}, {0, 3, 4, 0, 0} }; // Khai báo một mảng 2 chiều, 3 dòng & 5 cột. // Không chỉ định giá trị các phần tử. int[,] a = new int[3,5];ArrayExample2.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class ArrayExample2 { static void Main(string[] args) { // Khai báo một mảng 2 chiều, 3 dòng 5 cột. // Chỉ định các giá trị cho các phần tử. int[,] a = { { 1, 2, 3, 4, 5 }, { 0, 3, 4, 5, 7 }, { 0, 3, 4, 0, 0 } }; // Sử dụng vòng lặp for để in ra các phần tử của mảng. for (int row = 0; row < 3; row++) { for (int col = 0; col < 5; col++) { Console.WriteLine("Element at [{0},{1}] = {2}", row, col, a[row,col]); } Console.WriteLine("-------------"); } // Khai báo một mảng 2 chiều có số dòng 3, số cột 5 // Các phần tử chưa được gán giá trị. int[,] b = new int[3, 5]; Console.ReadLine(); } } }Kết quả chạy ví dụ:
Mảng của mảngArrayOfArrayExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class ArrayOfArrayExample { static void Main(string[] args) { // Khai báo một mảng 3 phần tử. // Mỗi phần tử là một mảng khác. string[][] teams = new string[3][]; string[] mu = { "Beckham","Giggs"}; string[] asenal = { "Oezil", "Szczęsny", "Walcott" }; string[] chelsea = {"Oscar","Hazard","Drogba" }; teams[0] = mu; teams[1] = asenal; teams[2] = chelsea; // Sử dụng vòng lặp for để in ra các phần tử của mảng. for (int row = 0; row < teams.Length; row++) { for (int col = 0; col < teams[row].Length ; col++) { Console.WriteLine("Element at [{0}],[{1}] = {2}", row, col, teams[row][col]); } Console.WriteLine("-------------"); } Console.ReadLine(); } } }Kết quả chạy ví dụ
12. Class, Constructor và đối tượng
Bạn cần có sự phân biệt giữa 3 khái niệm:- Class
- Cấu tử (Constructor)
- Đối tượng (Instance)
Hoặc khi chúng ta nói về người (Person) thì đó cũng trìu tượng, nó là một lớp. Nhưng khi chỉ thẳng vào bạn hoặc tôi thì đó là 2 đối tượng khác nhau, cùng thuộc lớp người.
Person.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class Person { // Đây là một trường (field) . // Lưu trữ tên người. public string Name; // Đây là một Constructor. // Nó dùng để tạo ra một đối tượng. // Constructor này này có một tham số. // Constructr luôn có tên giống tên của lớp. public Person(string persionName) { // Gán giá trị của tham số cho trường name. this.Name = persionName; } // Đây là một phương thức trả về kiểu string. public string GetName() { return this.Name; } } }Như trên class Person không có phương thức Main. Tiếp theo class PersonTest là ví dụ khởi tạo các đối tượng của Person thông qua các cấu tử.PersonTest.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class PersonTest { static void Main(string[] args) { // Tạo một đối tượng của lớp Person. // Khởi tạo đối tượng này tử Constructor của lớp Person. Person edison = new Person("Edison"); // Lớp Person có phương thức GetName(). // Sử dụng đối tượng để gọi phương thức GetName(): String name = edison.GetName(); Console.WriteLine("Person 1: " + name); // Tạo một đối tượng từ của lớp Person. // Khởi tạo đối tượng này tử Constructor của lớp Person. Person billGate = new Person("Bill Gates"); // Lớp Person có trường 'name' là công khai (public). // Bạn có thể sử dụng đối tượng để truy cập vào trường 'name'. String name2 = billGate.Name; Console.WriteLine("Person 2: " + name2); Console.ReadLine(); } } }Kết quả chạy ví dụ:
13. Trường (Field)
Trong phần tiếp theo này chúng ta sẽ thảo luận về một số khái niệm:- Trường (Field)
- Trường thông thường
- Trường tĩnh (static Field)
- Trường const (const Field)
- Trường tĩnh và readonly (static readonly Field)
FieldSample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class FieldSample { // Đây là một trường tĩnh (static field). public static int MY_STATIC_FIELD = 100; // Đây là một trường thông thường. public string MyValue; // Đây là một Constructor của lớp FieldSample. public FieldSample(string value) { this.MyValue = value; } } }FieldSampleTest.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class FieldSampleTest { static void Main(string[] args) { // In ra giá trị của trường tĩnh (static field). // Với các trường tĩnh, bạn phải truy cập nó thông qua tên lớp. Console.WriteLine("FieldSample.MY_STATIC_FIELD= {0}", FieldSample.MY_STATIC_FIELD); // Bạn có thể thay đổi giá trị của trường tĩnh. FieldSample.MY_STATIC_FIELD = 200; Console.WriteLine(" ------------- "); // Tạo đối tượng thứ nhất. FieldSample obj1 = new FieldSample("Value1"); // Các trường không tĩnh bạn phải truy cập thông qua đối tượng. Console.WriteLine("obj1.MyValue= {0}", obj1.MyValue); // Tạo đối tượng thứ 2: FieldSample obj2 = new FieldSample("Value2"); Console.WriteLine("obj2.MyValue= {0}" , obj2.MyValue); // Bạn có thể thay đổi giá trị của trường. obj2.MyValue = "Value2-2"; Console.ReadLine(); } } }Kết quả chạy ví dụ:
Ví dụ readonly & static readonly.ConstFieldExample.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class ConstFieldExample { // Một trường hằng số, giá trị của nó được xác định tại thời điểm biên dịch. // Bạn không thể gán giá trị mới cho các trường const. // Chú ý: Trường const luôn luôn là static (Tĩnh). public const int MY_VALUE = 100; // Một trường tĩnh (static field) và readonly. // Giá trị của nó có thể gán sẵn, hoặc chỉ được gán 1 lần trong Constructor. public static readonly DateTime INIT_DATE_TIME1 = DateTime.Now; // Một trường readonly và không tĩnh (none-static) // Giá trị của nó có thể gán sẵn, hoặc chỉ được gán một lần trong Constructor. public readonly DateTime INIT_DATE_TIME2 ; public ConstFieldExample() { // Giá trị của nó được gán 1 lần, tại lần chạy đầu tiên. INIT_DATE_TIME2 = DateTime.Now; } } }14. Phương thức (Method)
Phương thức (Method)- Phương thức thông thường.
- Phương thức tĩnh
- Phương thức sealed. (Sẽ được đề cập trong phần thừa kế của class).

15. Thừa kế trong C#
CSharp cho phép viết class mở rộng từ một class khác. Class mở rộng từ một class khác được gọi là class con. Class con có được thừa kế các trường, thuộc tính và các method từ class cha.Hãy xem một ví dụ minh họa về thừa kế trong CSharp:Animal.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { // Mô phỏng một lớp động vật. class Animal { public Animal() { } public void Move() { Console.WriteLine("Move ...!"); } } }Cat.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class Cat : Animal { public void Say() { Console.WriteLine("Meo"); } // Một phương thức của lớp Cat. public void Catch() { Console.WriteLine("Catch Mouse"); } } }Ant.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { // Con kiến class Ant : Animal { } }AnimalTest.csusing System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HelloCSharp { class AnimalTest { static void Main(string[] args) { // Khai báo một đối tượng Cat. Cat tom = new Cat(); // Kiểm tra xem 'tom' có phải là đối tượng Animal hay không. // Kết quả rõ ràng là true. bool isAnimal = tom is Animal; // ==> true Console.WriteLine("tom is Animal? " + isAnimal); // Gọi phương thức Catch tom.Catch(); // Gọi vào phương thức Say() của Cat. // ==> Meo tom.Say(); Console.WriteLine("--------------------"); // Khai báo một đối tượng Animal // Khởi tạo đối tượng thông qua cấu tử của Cat. Animal tom2 = new Cat(); // Gọi phương thức Move() tom2.Move(); Console.WriteLine("--------------------"); // Tạo một đối tượng Ant. Ant ant = new Ant(); // Gọi phương thức Move() thừa kế được từ Animal. ant.Move(); Console.ReadLine(); } } }Kết quả chạy class AnimalTest:
16. Thừa kế và đa hình trong C#
Bạn có thể xem tiếp tài liệu "Thừa kế và đa hình trong CSharp" tại:- Thừa kế và đa hình trong C#
Các hướng dẫn lập trình C#
- Thừa kế và đa hình trong C#
- Bắt đầu với C# cần những gì?
- Học nhanh C# cho người mới bắt đầu
- Cài đặt Visual Studio 2013 trên Windows
- Abstract class và Interface trong C#
- Cài đặt Visual Studio 2015 trên Windows
- Nén và giải nén trong C#
- Hướng dẫn lập trình đa luồng trong C#
- Hướng dẫn và ví dụ C# Delegate và Event
- Cài đặt AnkhSVN trên Windows
- Lập trình C# theo nhóm sử dụng Visual Studio và SVN
- Cài đặt .Net Framework
- Access Modifier trong C#
- Hướng dẫn và ví dụ C# String và StringBuilder
- Hướng dẫn và ví dụ C# Property
- Hướng dẫn và ví dụ C# Enum
- Hướng dẫn và ví dụ C# Structure
- Hướng dẫn và ví dụ C# Generics
- Hướng dẫn xử lý ngoại lệ trong C#
- Hướng dẫn và ví dụ Date Time trong C#
- Thao tác với tập tin và thư mục trong C#
- Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Kết nối cơ sở dữ liệu SQL Server trong C#
- Làm việc với cơ sở dữ liệu SQL Server trong C#
- Kết nối cơ sở dữ liệu MySQL trong C#
- Làm việc với cơ sở dữ liệu MySQL trong C#
- Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
- Làm việc với cơ sở dữ liệu Oracle trong C#

Các hướng dẫn lập trình C#
- Thừa kế và đa hình trong C#
- Bắt đầu với C# cần những gì?
- Học nhanh C# cho người mới bắt đầu
- Cài đặt Visual Studio 2013 trên Windows
- Abstract class và Interface trong C#
- Cài đặt Visual Studio 2015 trên Windows
- Nén và giải nén trong C#
- Hướng dẫn lập trình đa luồng trong C#
- Hướng dẫn và ví dụ C# Delegate và Event
- Cài đặt AnkhSVN trên Windows
- Lập trình C# theo nhóm sử dụng Visual Studio và SVN
- Cài đặt .Net Framework
- Access Modifier trong C#
- Hướng dẫn và ví dụ C# String và StringBuilder
- Hướng dẫn và ví dụ C# Property
- Hướng dẫn và ví dụ C# Enum
- Hướng dẫn và ví dụ C# Structure
- Hướng dẫn và ví dụ C# Generics
- Hướng dẫn xử lý ngoại lệ trong C#
- Hướng dẫn và ví dụ Date Time trong C#
- Thao tác với tập tin và thư mục trong C#
- Hướng dẫn sử dụng Stream - luồng vào ra nhị phân trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Kết nối cơ sở dữ liệu SQL Server trong C#
- Làm việc với cơ sở dữ liệu SQL Server trong C#
- Kết nối cơ sở dữ liệu MySQL trong C#
- Làm việc với cơ sở dữ liệu MySQL trong C#
- Kết nối cơ sở dữ liệu Oracle trong C# không cần Oracle Client
- Làm việc với cơ sở dữ liệu Oracle trong C#
Các bài viết mới nhất
- Dart Stream Single và Broadcast
- Xử lý lỗi trong Dart Stream
- Hướng dẫn và ví dụ Dart Stream
- So sánh đối tượng trong Dart với thư viện Equatable
- Flutter BloC cho người mới bắt đầu
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Hướng dẫn và ví dụ Flutter Radio
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Tạo Module trong Flutter
- Các hướng dẫn lập trình C#
Từ khóa » Khai Báo Using Trong C#
-
Không Gian Tên (namespace) Và Lệnh Using Trong C# - Lập Trình
-
Cách Sử Dụng Using Trong C# Như Thế Nào?
-
Sử Dụng Giao Diện IDisposable Và Từ Khóa Using Trong C # Sharp
-
Một Demo Nhỏ Về Sử Dụng Keyword Using Trong C - Lập Trình .NET
-
Cú Pháp C# Cơ Bản | Comdy
-
[C#] Hướng Dẫn Sử Dụng IDisposabale Và Từ Khóa Using Trong ...
-
Namespace Trong C# - Học Lập Trình Cơ Bản đến Nâng Cao - CodeGym
-
Cấu Trúc Lệnh Cơ Bản Trong C# Console Application | How Kteam
-
Biến : Biến Và Cách Khai Báo Biến Trong C# | Codelearn
-
Namespace (không Gian Tên) Trong C# | Tự Học ICT
-
Biến Và Hằng Trong C# - Lập Trình C# Cơ Bản | Tự Học ICT
-
Namespace Trong C# - Học Lập Trình C# Online - VietTuts
-
[C# Căn Bản] Kiểu Dữ Liệu, Khai Báo Biến, Hằng Số, Toán Tử - Viblo
-
Bộ Câu Hỏi Phỏng Vấn C#/.Net Phần 4 - KungFu Tech