Lập trình .NET và C#

Lecture 2: Ngôn ngữ C# TS Đào Nam Anh UTM, Khoa KH&CN

Resources

John Connell. Coding Techniques for Microsoft Visual Basic .NET. Microsoft Press, 2002.

(cid:1) Các giải pháp lập trình C#, Nguyễn Ngọc Bình Phương - Thái Thanh Phong (cid:1) Allen Jones. C# Programmer's Cookbook. Microsoft Press, 2004 (cid:1)

(cid:1) Harvey M. Deitel, Paul J. Deitel, & Tem R. Nieto. Visual Basic .NET How to

(cid:1)

Program, Second Edition. Prentice Hall, 2002. Jose Mojica. C# and VB .NET Conversion Pocket Reference. O'Reilly, 2002. James Avery. Ten Must-Have Tools Every Developer Should Download Now. MSDN Magazine, 2004.

(cid:1)

Microsoft Press, 2003.

(cid:1) Karl Moore. The Ultimate VB.NET and ASP.NET Code Book. Apress, 2003 (cid:1) Matthew MacDonald. Microsoft Visual Basic .NET Programmer's Cookbook.

Cookbook. Sams Publishing, 2003.

(cid:1) Mark Schmidt & Simon Robinson. Microsoft Visual C# .NET 2003 Developer's

Hồ Chí Minh, 2005.

(cid:1) Dương Quang Thiện. Lập trình Visual C# thế nào? Nhà xuất bản Tổng Hợp TP.

Visual Basic .NET. Nhà xuất bản Giao thông Vận tải, 2006

(cid:1) Nguyễn Ngọc Bình Phương & Lê Trần Nhật Quỳnh. Các giải pháp lập trình

www.developersdex.com, www.windowsforms.net, www.gotdotnet.com, www.codeguru.com, www.developerfusion.com

(cid:1) www.msdn.microsoft.com, www.codeproject.com, www.msd2d.com,

Ngôn ngữ C#

(cid:1) Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được xây dựng sẵn.

(cid:1) C# có ý nghĩa cao khi nó thực thi những khái niệm lập trình hiện đại: C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng.

(cid:1) C# hội đủ những điều kiện lập trình hiện đại, hơn nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.

Ngôn ngữ C#

(cid:1) Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. (cid:1) Cả hai người này điều là những người nổi tiếng, trong đó Anders Hejlsberg được biết đến là tác giả của Turbo Pascal. Và ông đứng đầu nhóm thiết kế Borland Delphi, một trong những thành công đầu tiên của việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình client/server.

Ngôn ngữ C#

(cid:1) Sự hỗ trợ của C# cho việc định nghĩa và làm

việc với những lớp.

(cid:1) C# chứa những từ khóa cho việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính của lớp, và cho việc thực thi đóng gói, kế thừa, và đa hình, ba thuộc tính cơ bản của bất cứ ngôn ngữ lập trình hướng đối tượng.

Ngôn ngữ C#

(cid:1) C# hỗ trợ giao diện interface (cid:1) Một lớp chỉ có thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa như trong ngôn ngữ C++, tuy nhiên một lớp có thể thực thi nhiều giao diện.

Ngôn ngữ C#

(cid:1) Trong ngôn ngữ C#, những cấu trúc được hỗ

trợ.

(cid:1) Một cấu trúc được giới hạn, là kiểu dữ liệu

nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều hành và bộ nhớ so với một lớp.

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C#

(cid:1) Không cần thiết có một ngôn ngữ lập trình

mới?

(cid:1) C# là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó được tạo từ nền tảng phát triển hơn.

(cid:1) Microsoft bắt đầu với công việc trong C và

C++ và thêm vào những đặc tính mới để làm cho ngôn ngữ này dễ sử dụng hơn. Nhiều trong số những đặc tính này khá giống với những đặc tính có trong ngôn ngữ Java

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C#

(cid:1) C# là ngôn ngữ đơn giản (cid:1) C# là ngôn ngữ hiện đại (cid:1) C# là ngôn ngữ hướng đối tượng (cid:1) C# là ngôn ngữ mạnh mẽ và mềm dẻo (cid:1) C# là ngôn ngữ có ít từ khóa (cid:1) C# là ngôn ngữ hướng module (cid:1) C# trở nên phổ biến

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) đ(cid:20)n gi(cid:21)n

(cid:1) C# loại bỏ một vài sự phức tạp và rối rắm của

những ngôn ngữ như Java và c++, bao gồm macro, template, đa kế thừa, và lớp cơ sở ảo (virtual base class).

(cid:1) C# cú pháp, biểu thức, toán tử từ ngôn ngữ C và C++, nhưng được cải tiến làm cho ngôn ngữ đơn giản hơn.

(cid:1) Trong C++ có ba toán tử làm việc với các thành viên là ::, . , và ->. Trong C#, chúng được thay thế với một toán tử duy nhất gọi là . (dot).

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) hi(cid:23)n đ(cid:2)i

(cid:1) Xử lý ngoại lệ, thu gom bộ nhớ tự động,

những kiểu dữ liệu mở rộng, và bảo mật mã nguồn là những đặc tính trong ngôn ngữ hiện đại.

(cid:1) C# chứa tất cả những đặc tính trên.

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) hư(cid:25)ng đ(cid:26)i tư(cid:28)ng

(cid:1) Ngôn ngữ hướng đối tượng (Object-oriented

language) có đặc tính: (cid:1) sự đóng gói (encapsulation), (cid:1) sự kế thừa (inheritance), và (cid:1) đa hình (polymorphism).

(cid:1) C# chứa tất cả những đặc tính trên.

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) m(cid:2)nh m(cid:30) và m m d!o

(cid:1) C# chỉ bị giới hạn ở chính bởi người sử dụng (cid:1) C# không đặt những ràng buộc lên những

việc có thể làm.

(cid:1) C# được sử dụng cho nhiều các dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, những trình biên dịch cho các ngôn ngữ khác

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) ít t# khóa

abstract default foreach object sizeof unsafe

as delegate goto operator stackalloc ushort

base do if out static using

bool double implicit override string virtual

break else in params struct volatile

byte enum int private switch void

case event interface protected this while

catch explicit internal public throw

char extern is readonly true

checked false lock ref try

class finally long return typeof

const fixed namespace sbyte uint

continue float new sealed ulong

decimal for null short unchecked

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là ngôn ng(cid:13) hư(cid:25)ng module

(cid:1) Mã nguồn C# có thể được viết trong những phần

được gọi là Class,

(cid:1) Class này chứa các phương thức thành viên của

nó.

(cid:1) Class và những phương thức có thể được sử dụng lại trong ứng dụng hay các chương trình khác. (cid:1) Bằng cách truyền các mẫu thông tin đến những Class hay phương thức chúng ta có thể tạo ra những mã nguồn dùng lại có hiệu quả.

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# C# là m(t ngôn ng(cid:13) ph* bi,n

(cid:1) Nhiều sản phẩm của MS này đã chuyển đổi

và viết lại bằng C#.

(cid:1) .NET là một lý do khác để đem đến sự thành công của C#. .NET là một sự thay đổi trong cách tạo và thực thi những ứng dụng.

(cid:1) C# trở nên phổ biến do những đặc tính: đơn

giản, hướng đối tượng, mạnh mẽ...

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# Ngôn ng(cid:13) C# và ngôn ng(cid:13) khác

(cid:1) Sự khác nhau giữa ngôn ngữ C# và Visual Basic,

C++ và Java?

(cid:1) C# loại bỏ một vài các đặc tính của C++, nhưng nó tránh được những lỗi mà thường gặp trong ngôn ngữ C++.

(cid:1) Mã nguồn C# không đòi hỏi phải có tập tin header.

mã nguồn được viết trong khai báo một lớp.

(cid:1) .NET runtime trong C# thực hiện thu gom bộ nhớ tự động -> sử dụng con trỏ trong C# ít quan trọng hơn trong C++.

T(cid:2)i sao s(cid:7) d(cid:9)ng ngôn ng(cid:13) C# Ngôn ng(cid:13) C# và ngôn ng(cid:13) khác

(cid:1) C# cũng từ bỏ ý tưởng đa kế thừa như trong C++. (cid:1) C# đưa thêm thuộc tính vào trong một lớp giống

như trong Visual Basic

(cid:1) Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian: C# biên dịch ra MSIL còn Java biên dịch ra bytecode

(cid:1) C# chứa nhiều kiểu dữ liệu cơ bản hơn Java và

cũng cho phép nhiều sự mở rộng với kiểu dữ liệu giá trị.

L(cid:25)p, đ(cid:26)i tư(cid:28)ng và ki2u d(cid:13) li(cid:23)u (class, object, type)

(cid:1) kiểu trong C# được định nghĩa là một lớp

(class),

(cid:1) các thể hiện riêng của từng lớp được gọi là

đối tượng (object). (cid:1) Xem chương trình…

Phư(cid:20)ng th8c

(cid:1) Hai thành phần chính cấu thành một lớp là

(cid:1) thuộc tính hay tính chất (property) (cid:1) phương thức hay còn gọi là hành động ứng xử của đối

tượng (function)

(cid:1) Trong C# hành vi được định nghĩa như một phương

thức thành viên của lớp.

(cid:1) Phương thức chính là các hàm được định nghĩa

trong lớp.

(cid:1) Khi chương trình thực thi, CLR gọi hàm Main() đầu tiên, hàm Main() là đầu vào của chương trình, và mỗi chương trình phải có một hàm Main().

Chú thích -Comment

(cid:1) Một chương trình được viết tốt thì cần phải

có chú thích các đoạn mã được viết.

(cid:1) Các đoạn chú thích này sẽ không được biên dịch và cũng không tham gia vào chương trình.

(cid:1) Mục đích chính là làm cho đoạn mã nguồn rõ

ràng và dễ hiểu. (cid:1) Ctrl KC, Ctrl KU

; ng d(cid:9)ng Console

(cid:1) giao tiếp với người dùng thông quan bàn

phím và không có giao diện người dùng (UI)

(cid:1) dùng phương thức WriteLine() của lớp

Console.

Namespace

(cid:1) .NET cung cấp một thư viện các lớp đồ sộ và thư viện này có tên là FCL (Framework Class Library). Trong đó Console chỉ là một lớp nhỏ trong hàng ngàn lớp trong thư viện. Mỗi lớp có một tên riêng, vì vậy FCL có hàng ngàn tên như ArrayList, Dictionary, FileSelector,…

(cid:1) Tạo namespace, namsespace sẽ hạn chế

phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa.

Toán t(cid:7) ‘.’

(cid:1) dấu ‘.’ được sử dụng để truy cập đến

phương thức hay dữ liệu trong một lớp, và ngăn cách giữa tên lớp đến một namespace xác nhận

(cid:1) System.Console.WriteLine(); (cid:1) namespace có thể được chia thành các namespace con gọi là subnamespace.

T# khóa using

(cid:1) Để làm cho chương trình gọn hơn, và không cần phải viết từng namespace cho từng đối tượng, C# cung cấp từ khóa using, sau từ khóa này là một namespace hay subnamespace với mô tả đầy đủ trong cấu trúc phân cấp của nó.

(cid:1) using System; (cid:1) System.Console.WriteLine(); (cid:1) Console.WriteLine(“Hello”);

Void static

(cid:1) Static (cid:1) Void

Question

Phân bi(cid:23)t ch(cid:13) thư@ng và ch(cid:13) hoa

(cid:1) giống như C/C++, C# là ngôn ngữ phân biệt chữ

thường với chữ hoa

(cid:1) C# không giống như VB, môi trường phát triển C#

sẽ không tự sửa các lỗi này

(cid:1) Qui ước cho cách đặt tên biến, hằng, hàm, và nhiều

định danh khác nữa. Cú pháp lạc đà (camel notation) cho tên biến và cú pháp Pascal cho hàm, hằng, và thuộc tính.

(cid:1) myDictionary theo cách đặt tên cú pháp lạc đà. (cid:1) DrawLine, thuộc tính ColorBackground theo cách

đặt tên cú pháp Pascal.