Định danh là tờn được đặt cho kiểu dữ liệu, phương thức, biến,
hằng, đối tượng, khụng gian tờn… Định danh là một dóy ký tự cú
phõn biệt chữ hoa, thường. Tờn bắt đầu bằng ký tự chữ cỏi hoặc dấu
gạch nối dưới _, cỏc ký tự cũn lại phải là ký tự chữ cỏi, chữ số, dấu
gạch nối dưới. Cỏc định danh khụng được đặt tờn trựng với từ khúa
của C#.
Khi đặt tờn nờn theo quy tắc đặt tờn định nghĩa sẵn của C# cho
dễ nhớ là tất cả cỏc tờn của lớp, phương thức, biến, giao tiếp, khụng gian tờn… đều viết chữ hoa đầu từ, ngoại trừ tờn hằng viết chữ hoa.
2.1.4. Lời chỳ thớch (Comment)
Lời chỳ thớch thờm vào chương trỡnh với mục đớch giải thớch, giỳp cho người lập trỡnh dễ dàng bổ sung, sửa chữa, nõng cấp chương
trỡnh. Khi chạy chương trỡnh, trỡnh dịch sẽ bỏ qua chỳ thớch.
Cỏc lời chỳ thớch cú thể được thờm vào trong mó nguồn C#
giống như trong Java, C++ và cú thể đặt tại bất kỳ vị trớ nào:
Chỳ thớch gồm một hay nhiều dũng: bắt đầu chỳ thớch với
dấu /* và kết thỳc bởi */
Chỳ thớch một dũng: bắt đầu dũng chỳ thớch bởi dấu // Ngoài hai kiểu chỳ thớch trờn giống trong Java, C++ thỡ C#
cũn hỗ trợ thờm kiểu thứ ba, kiểu này chứa cỏc định dạng
XML nhằm xuất ra tập tin XML khi biờn dịch để tạo tài liệu
chỳ thớch cho mó nguồn. Cỏc chỳ thớch XML rất đơn giản, được tạo bằng cỏch đặt dấu /// trước cỏc lớp, giao tiếp, phương thức hoặc trước phần khai bỏo thuộc tớnh… Cú hơn
20 loại thẻ khỏc nhau cú thể được sử dụng trong cỏc chỳ thớch XML, và được chia làm 2 loại chớnh: thẻ chớnh và thẻ phụ.
Sau khi tạo chỳ thớch, mở cửa sổ Properties của ứng dụng, chọn
trang Build, rồi kớch chọn mục XML documentation file. Biờn dịch ứng dụng, sẽ phỏt sinh tập tin tài liệu chỳ thớch .XML.
Hay sử dụng trỡnh biờn dịch dũng lệnh với tựy chọn
/doc:TậpTin.xml
csc /doc:Hello.xml Hello.cs
Vớ dụ: Chỳ thớch cho một hay nhiều dũng using System; namespace Hello { class Hello { /* Xuất ra màn hỡnh lời chào
Sử dụng phương thức WriteLine của lớp System.Console
*/
static void Main() {
//Xuất chuỗi “Welcome to C#”
Console.WriteLine("Welcome to C#"); } } } Chỳ thớch tài liệu XML Cỏc thẻ chớnh: Là những thẻ mà bạn sử dụng một cỏch độc lập với những thẻ khỏc. a1. <summary>
Thẻ <summary> mụ tả kiểu và thành viờn của kiểu như mụ tả
lớp, phương thức, thuộc tớnh…
a2. <remarks>
Thẻ <remarks> sử dụng để mụ tả một kiểu, bổ sung thụng tin
cho thẻ <summary>.
a3. <value>
/// <value>
/// Họ và tờn nhõn viờn /// </value>
private string fullname;
a4. <param>
Thẻ <param> được sử dụng để chỳ thớch từng tham đối của một phương thức.
a5. <returns>
Thẻ này được sử dụng để chỳ thớch giỏ trị trả về của một phương thức.
/// <summary>
/// Lớp thư viện chứa cỏc phương thức xử lý chuỗi
/// </summary>
public class StringProcess {
/// <remarks>
/// Phương thức trả về chuỗi con của một chuỗi
/// </remarks>
///<param name="st">Chuỗi cần lấy chuỗi con</param> ///<param name="startIndex">Vị trớ bắt đầu lấy chuỗi con
</param>
///<param name="endIndex">Vị trớ kết thỳc chuỗi con
</param>
///<returns>Trả về chuỗi con từ vị trớ startIndex đến vị trớ
endIndex</returns>
public static string SubString(string st, int startIndex, int endIndex) {}
a6. <exception>
Thẻ <exception> chỳ thớch ngoại lệ mà phương thức phỏt sinh
bởi thuộc tớnh cref và giải thớch khi nào ngoại lệ phỏt sinh.
a7. <example>
Thẻ này cú thể được sử dụng để cung cấp một vớ dụ về cỏch sử
dụng phương thức, thuộc tớnh. Cỏc vớ dụ là một phần chớnh của việc
ghi chộp tài liệu chất lượng cao, là hướng dẫn tốt cho cỏc nhà phỏt triển. Bằng cỏch sử dụng thẻ <example> cựng với thẻ <code> (một
trong những thẻ phụ), bạn cú thể cung cấp trực tiếp cỏc vớ dụ.
/// <summary>
/// Phương thức xúa và trả về phần tử ở đỉnh của ngăn xếp stack
/// </summary>
/// <returns>Trả về giỏ trị phần tử ở đỉnh stack</returns> /// <exception cref="EmptyStackException">
/// Ngoại lệ phỏt sinh khi stack rỗng
/// </exception> /// <example> /// <code>
/// // Lấy phần tử ở đỉnh của stack /// string st = s.Pop();
/// </code> /// </example> public string Pop() {}
a8. <permission>
Thẻ <permission> cho phộp bạn xỏc định quyền truy cập một
thành viờn.
public class TestClass {
/// <permission cref="System.Security.PermissionSet"> Mọi người cú thể truy cập phương thức này </permission>
void Test() {} }
a9. <seealso>
Cú thể được sử dụng để tham chiếu cỏc lớp, thành viờn của lớp
hoặc tài liệu bổ sung khỏc.
public class TestClass {
/// <summary>DoWork là một phương thức của lớp
TestClass
/// <seealso cref="TestClass.Main"/> /// </summary>
public static void DoWork(int Int1) {} static void Main() {}
}
a10. <include>
Thẻ <include> được sử dụng để tham chiếu đến cỏc chỳ giải
trong tập tin khỏc. Thay vỡ chỳ thớch trong mó nguồn, bạn cú thể sử
dụng một tập tin chỳ giải bờn ngoài. Để sử dụng thẻ này, bạn cần xỏc định tờn tập tin chứa chỳ giải và biểu thức XPath chỉ đến chỳ giải:
<include file = 'TậpTin' path = 'ĐườngDẫnThẻ [@name = "TờnThẻ"]'/>
Đường dẫn thẻ: biểu thức XPath hợp lệ chọn thẻ chứa chỳ giải
trong tập tin
Tờn thẻ: tờn của thẻ chứa chỳ giải
/// <include file='xml_include_tag.doc'
/// path='MyDocs/MyMembers[@name="test"]' /> public class Test
{
void TestMethod() {} }
Cỏc thẻ phụ
Là thẻ được sử dụng bờn trong cỏc thẻ chớnh. Những thẻ
này được sử dụng để đỏnh dấu và định dạng Text để đưa vào cỏc thẻ
chớnh.
b1. <c> và <code>
Thẻ <code> được sử dụng định nghĩa một hay nhiều dũng là mó. Và thẻ <c> định nghĩa một phần chỳ thớch là mó.
/// <summary>
/// Thay thế cỏc ký tựđặc biệt bằng dấu cỏch <c>ReplaceSpecial Char("a")</c>
/// </summary>
/// <param name="s"></param>
/// <returns>Trả về chuỗi sau khi đó thay thế ký tự đặc biệt bằng
dấu cỏch</returns> /// <example>
/// <code>
/// Chuỗi ký tựđặc biệt
/// // gỏn cỏc ký tựđặc biệt thành ký tự rỗng. /// s = s.ReplaceSpecialChar("%---**"); /// </code>
/// </example>
private static string ReplaceSpecialChar(string s){}
b2. <para>
Được sử dụng để chỉ định một đoạn trong cỏc chỳ thớch. Nếu
cỏc chỳ thớch dài, bạn nờn ngắt nú thành cỏc đoạn để làm cho việc đọc
trở nờn dễ dàng hơn.
b3. <see>
Thẻ <see> cú thể sử dụng giống như thẻ <seealso> nhưng thẻ
<see> sử dụng bờn trong một thẻ khỏc. Khi bạn muốn liệt kờ một số phương thức của một lớp và sử dụng thẻ <see> để tham chiếu đến
những phương thức đú.
public class TestClass {
/// <summary>DoWork là phương thức của lớp TestClass
/// <para> Ngắt đoạn chỳ thớch <see
cref="System.Console.WriteLine"/> cho thụng tin về lệnh
xuất </para>
/// <seealso cref="TestClass.Main"/> /// </summary>
public static void DoWork(int Int1) {} static void Main() {}
}
b4. <paramref >
Thẻ này xỏc định tham đối nào mà bạn tham chiếu đến /// <remarks>Phương thức MyMethod thuộc lớp MyClass
/// <paramref name="i"/> tham đối là một số nguyờn /// </remarks>
public static void MyMethod(int i) {}
b5. Cỏc thẻ List
Cỏc thẻ List để tạo cỏc danh sỏch. Thẻ <list> cú một thuộc tớnh Type, định nghĩa loại danh sỏch nào mà bạn đang tạo cú thể cú giỏ trị
bullet, number hoặc table.
Thẻ con của thẻ <list> là thẻ <listheader> cú thể được sử dụng để định nghĩa tiờu đề cho danh sỏch. Nú cú thể chứa cỏc thẻ <term>
và <description>.
Thẻ <list> cú thể chứa cỏc thẻ <item>. Mỗi thẻ <item> là một
mục trong danh sỏch và cú thể bao gồm cỏc thẻ <term> và thẻ
<description>.
public class MyClass {
/// <remarks> Đõy là vớ dụ thẻ tạo danh sỏch
/// <list type="bullet"> /// <item> /// <description>Item 1.</description> /// </item> /// <item> /// <description>Item 2.</description> /// </item> /// </list> /// </remarks>
public static void Main (){} }
2.2. KIỂU DỮ LIỆU, BIẾN, HẰNG
2.2.1. Kiểu dữ liệu (Data type)
C# là một ngụn ngữ định kiểu mạnh mẽ. Kiểu dữ liệu là tập hợp
cỏc giỏ trị mà một biến thuộc kiểu đú cú thể nhận được. Mỗi biến phải
khai bỏo thuộc một kiểu dữ liệu.
Cỏc kiểu dữ liệu trong ngụn ngữ C# chia làm hai loại, kiểu dữ
liệu xõy dựng sẵn và kiểu dữ liệu do người dựng định nghĩa. C# cũng
phõn loại cỏc kiểu dữ liệu thành hai loại: kiểu dữ liệu giỏ trị (value data
type), và kiểu dữ liệu tham chiếu (reference data type). Việc phõn chia
này do sự khỏc nhau khi lưu kiểu dữ liệu giỏ trị và kiểu dữ liệu tham
chiếu trong bộ nhớ. Biến kiểu dữ liệu giỏ trị lưu giữ giỏ trị của nú trong
bộ nhớ tĩnh (stack). Trong khi đú biến kiểu tham chiếu, khụng chứa đối tượng thuộc kiểu này, mà lưu một địa chỉ hay tham chiếu đến đối tượng trong bộ nhớ stack, cũn đối tượng thật sự lưu trong bộ nhớ động
(heap). Nếu chỳng ta cú một đối tượng cú kớch thước rất lớn thỡ việc lưu giữ chỳng trờn bộ nhớ heap rất cú ớch. Tất cả cỏc kiểu dữ liệu cơ sở
xõy dựng sẵn là kiểu dữ liệu giỏ trị. Kiểu chuỗi và cỏc lớp định nghĩa
sẵn là kiểu dữ liệu tham chiếu. Và tất cả cỏc kiểu do người dựng định
nghĩa ngoại trừ kiểu cấu trỳc, liệt kờ đều là kiểu dữ liệu tham chiếu.
Ngoài ra C# cũng hỗ trợ kiểu con trỏ như C++, nhưng ớt khi được sử
dụng, khi làm việc với những đoạn mó lệnh cú sử dụng kiểu con trỏ, sẽ được đỏnh dấu khụng an toàn (unsafe).
2.2.1.1. Kiểu dữ liệu giỏ trị
Bao gồm cỏc kiểu dữ liệu cơ sở định nghĩa sẵn, kiểu liệt kờ và kiểu cấu trỳc. Kiểu dữ liệu cấu trỳc người dựng định nghĩa sẽ được
tỡm hiểu trong chương kế tiếp cựng với kiểu lớp và kiểu tham chiếu phương thức (delegate).
Kiểu cơ sở
Ngụn ngữ C# đưa ra cỏc kiểu dữ liệu cơ sở rất hữu dụng, mỗi
ỏnh xạ cỏc kiểu dữ liệu cơ sở của C# đến cỏc kiểu dữ liệu của .NET
sẽ đảm bảo cỏc đối tượng được tạo ra trong C# cú thể được sử dụng đồng thời với cỏc đối tượng được tạo bởi bất kỳ ngụn ngữ khỏc được
biờn dịch bởi .NET.
Cỏc kiểu dữ liệu cơ sở là kiểu dữ liệu struct xõy dựng sẵn chứa
nhiều thuộc tớnh và phương thức cần thiết, trong đú phương thức thường dựng là: Parse(string s): chuyển chuỗi s thành kiểu struct tương ứng
Vớ dụ: float a = float.Parse(s);
Bảng 2.1. Kiểu dữ liệu cơ sở
Kiểu Mụ tả Độ lớn Kiểu .Net Phạm vi
bool Kiểu logic 1 bit Boolean true, false char Ký tự
Unicode
16 bits Char
0 … 65535 byte Số nguyờn 8 bits Byte 0 … 255 sbyte Số nguyờn 8 bits SByte -128 … 127
short Số nguyờn 16 bits Int16 -32768 … 32767 ushort Số nguyờn 16 bits UInt16 0 ... 65535
int Số nguyờn 32 bits Int32 -2147483648 ... 2147483647 uint Số nguyờn 32 bits UInt32 0 ... 4294967295
long Số nguyờn 64 bits Int64 -9223372036854775808 … 9223372036854775807 ulong Số nguyờn 64 bits UInt64 0 ... 18446744073709551615
float Số thực 32 bits Single -3.402823E38 ... 3.402823E38 double Số thực 64 bits Double -1.79769313486232E308 …
1.79769313486232E308
decimal Số thực 64 bits Decimal -79228162514264337593543950335 …
Kiểu liệt kờ
Kiểu liệt kờ đơn giản là tập hợp cỏc tờn hằng cú giỏ trị khụng thay đổi, giỳp bạn tổ chức dữ liệu khoa học hơn, mó trong sỏng dễ
hiểu hơn. C# cung cấp rất nhiều kiểu liệt kờ định nghĩa sẵn, sẽ được đề cập đến trong cỏc chương kế tiếp.
Để định nghĩa một kiểu liệt kờ ta thực hiện theo cỳ phỏp sau:
enum TờnKiểuLiệtKờ [KiểuCơSở]
{
//Danh sỏch cỏc thành phần liệt kờ };
Một kiểu liệt kờ bắt đầu với từ khúa enum, tiếp sau là một định
danh cho kiểu liệt kờ.
Danh sỏch liệt kờ là cỏc hằng được gỏn giỏ trị và mỗi thành phần phải phõn cỏch nhau dấu phẩy. Nếu chỳng ta khụng khởi tạo giỏ
trị cho cỏc thành phần này thỡ chỳng sẽ nhận cỏc giỏ trị liờn tiếp bắt đầu từ 0. Mỗi tờn hằng trong kiểu liệt kờ thuộc bất kỳ một kiểu dữ
liệu cơ sở nguyờn nào như int, short, long..., ngoại trừ kiểu ký tự.
Kiểu cơ sở chớnh là kiểu khai bỏo cho cỏc thành phần liệt kờ. Nếu bỏ qua thành phần này thỡ trỡnh biờn dịch sẽ gỏn mặc định là kiểu nguyờn int. Khi đú, mỗi thành phần trong kiểu liệt kờ tương ứng với
một giỏ trị số nguyờn.
Khi truy xuất giỏ trị của danh sỏch liệt kờ, cần phải chuyển kiểu
một cỏch tường minh.
Vớ dụ: using System; class Example {
enum VisibleType {None = 0, Hidden = 2, Visible = 4}; // In ra tờn và giỏ trị thành phần của enum
static void Main(string[] args) {
VisibleType visEnum = VisibleType.Hidden; Console.WriteLine(visEnum.ToString()); Console.WriteLine((int) VisibleType.Hidden); }
}
Kiểu Nullable (Nullable type)
C# 2.0 cung cấp kiểu struct System.Nullable<T> thuộc khụng
gian tờn System cho phộp kiểu giỏ trị cú giỏ trị null. Tất cả kiểu dữ
liệu cú giỏ trị null tương ứng. Một kiểu Nullable cú thể biểu diễn một
dóy giỏ trị của kiểu tương ứng và giỏ trị null. Chẳng hạn như biến
kiểu Nullable<Int32> cú thể gỏn giỏ trị từ -2147483648 đến
2147483647 hay giỏ trị null.
Kiểu Nullable khai bỏo cho cỏc biến kiểu giỏ trị mà cú thể gỏn
giỏ trị null. Bạn khụng thể tạo một kiểu Nullable dựa trờn kiểu tham
chiếu. Kiểu tham chiếu đó hỗ trợ giỏ trị null là tham chiếu rỗng.
Cỳ phỏp T? sử dụng để khai bỏo kiểu Nullable<T>, trong đú T
là kiểu giỏ trị. Phộp toỏn ?? để gỏn giỏ trị mặc định của biến kiểu
Nullable cú giỏ trị là null, cho biến khụng cú kiểu Nullable.
Vớ dụ:
int? x = null; //x khụng chứa bất kỳ giỏ trị
int y = x ?? -1; //x chứa giỏ trị 0
int? a = default(int); //a chứa giỏ trị 0
int? b = default(int?); //b khụng chứa bất kỳ giỏ trị
Kiểu Nullable cung cấp thuộc tớnh và phương thức sau:
Value: Trả về giỏ trị của biến và phỏt sinh ngoại lệ
InvalidOperationException nếu biến kiểu Nullable khụng
chứa bất kỳ giỏ trị
Vớ dụ:
int c = a.Value; //trả về 0
HasValue: Trả về true nếu biến kiểu Nullable cú giỏ trị, ngược lại trả về false
Vớ dụ:
bool e = a.HasValue; //trả về true
bool f = b.HasValue; //trả về false
if (y.HasValue) Console.Write(x.Value);
GetValueOrDefault(): nếu biến kiểu Nullable cú giỏ trị, trả về
giỏ trị, ngược lại trả về giỏ trị mặc định của kiểu tương ứng
Vớ dụ:
int g = a.GetValueOrDefault(); //trả về 0
int h = b.GetValueOrDefault(); //trả về 0
2.2.1.2. Kiểu dữ liệu tham chiếu Kiểu chuỗi
Kiểu dữ liệu chuỗi (string hay String) là kiểu tham chiếu xõy
dựng sẵn, lưu giữ một dóy ký tự. Chuỗi trong C# là khụng thay đổi,
mỗi khi chuỗi thay đổi, một chuỗi mới được tạo ra để chứa chuỗi
kết quả.
Tạo một đối tượng chuỗi: Nhiều string được tạo từ cỏc hằng chuỗi. Khi trỡnh dịch bắt gặp một chuỗi ký tự bao giữa cặp nhỏy kộp,