Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau Lam quen voi C, Danh cho cac ban moi bat dau
Trang 1Làm quen C#
Giới thiệu
C# là ngôn ngữ có vai trò quan trọng nhất trong kiến trúc Microsoft NET
Framework Trong bài này chúng ta sẽ tìm hiểu:
• Từ phần mềm (software) đến phần cứng (hardware)
• Làm quen môi trường Visual Studio
• Tạo một ứng dụng Console C#
• Hiểu được mục đích của các namespace
• Tạo một ứng dụng đồ hoạ (WPF) đơn giản
để viết hay sửa lỗi chương trình
Các ngôn ngữ cấp cao như Fortran, Pascal, C++ được phát triển với cáccâu lệnh phức tạp làm việc ở mức trừu tượng cao hơn so với ngôn
Trang 2ngữ Assembly Một trình biên dịch (compiler) được dùng để chuyển chươngtrình mức cao sang ngôn ngữ máy để thực thi như hình minh hoạ sau:
Một vài ngôn ngữ như Java, C#, hay Visual Basic, thêm một bước khácvào trong quá trình chuyển sang ngôn ngữ máy để tăng tính khả
chuyển (portable) cho chương trình Thay vì biên dịch trực tiếp đến ngôn
ngữ máy, mã chương trình được chuyển thành ngôn ngữ trung gian, thỉnhthoảng được gọi là bytecode Sau đó, tại thời điểm chạy chương trình (runtime), mã trung gian sẽ được biên dịch thành mã máy để thực thi Bướcchuyển từ mã trung gian đến mã máy còn được gọi là biên dịch Just – in –
time (JIT).
Đến thời điểm này chúng ta cần phân biệt 3 khái niệm quan trọng:
• Run time: thời điểm chương trình đang chạy
• Design time: thời điểm thiết kế hay xây dựng chương trình (viết mã,
thiết kế giao diện, v.v.)
• Biên dịch Just –in-time: bước chuyển từ mã trung gian đến mã máy.
Trong các ngôn ngữ NET như C# hay VB, ngôn ngữ trung gian được gọi
là Common Intermediate Language (CIL) và thành phần chuyển ngôn
Trang 3ngữ trung gian sang ngôn ngữ máy được gọi là Common Language
Runtime (CLR).
Trong Java, ngôn ngữ trung gian gọi là Java bytecode và thành phần
chuyển ngôn ngữ trung gian sang ngôn ngữ máy gọi là Java Virtual
Machine (JVM).
Hình ảnh minh hoạ chuyển mã từ ngôn ngữ cấp cao (Java,
C# hay VB) sang ngôn ngữ trung gian và cuối cùng là ngôn ngữ máy (xem
hình bên dưới):
Môi trường lập trình
Để chương trình có thể được viết, kiểm tra, hay sửa lỗi dễ dàng, cần một môitrường lập trình chứa nhiều công cụ hữu ích còn được gọi là Môi trường pháttriển tích hợp (Integrated Development Environment – IDE) như:
• Code Editor: dùng để soạn thảo mã chương trình
Trang 4• Debugger: dùng để phát hiện, chỉnh sửa lỗi chương trình.
• Compiler: biên dịch chương trình thành ngôn ngữ trung gian hay
máy
• Build automation tools: cho phép biên dịch tuỳ chọn
• Testing tools: kiểm tra chương trình
• Source code management tools: quản lý mã chương trình
• Object – oriented tools: tổ chức các lớp để dễ hiểu, dễ quản lý hơn
Visual Studio
Visual Studio là IDE c ủa Microsoft hỗ trợ các ngôn ngữ như C#, Visual
Basic, C/C++, F#, v.v M ột vài đặc trưng cơ bản được cung cấp bởi Visual
Studio IDE:
• Customizable menus and toolbars :các thực đơn và thanh công cụ
tuỳ chọn
• Customizable windows: các cửa sổ tuỳ chọn
• Auto hiding windows: các cửa sổ ẩn tự động
• IntelliSense: hỗ trợ cho viết mã chương trình, dùng phân biệt hoa
thường ví dụ first khác First
• Call stack: hiển thị một loạt các hàm gọi để dẫn đến điểm thực thi hiện
tại
• Sequence diagrams and dependency graphs: cung cấp trong cácphiên bản Pro của Visual Studio dùng để cung cấp thông tin về cách các
hàm gọi các hàm khác
Trang 5Làm quen môi tr ường Visual Studio
Visual Studio là môi trường lập trình giàu công cụ hỗ trợ xây dựng các dự
án nhỏ hay lớn với các ngôn ngữ lập trình trong NET như C#, Visual
Basic (VB), F#, C++ Tôi đang dùng Visual Studio 2012 (Ultimate),
khi khởi động thì giao diện sẽ trông như sau:
Trang 6Để làm quen với C#, chúng ta sẽ bắt đầu với một ứng dụng Console – ứngdụng chạy trên một cửa sổ dòng lệnh (như của sổ Command) và sau đó
chúng ta sẽ làm quen với ứng dụng giao diện đồ hoạ WPF
Chương trình đầu tiên
Tạo một ứng dụng C# ConsoleVào File > New > Project Trong hộp thoại New Project tại
mục Installed chọn Templates và chọn Visual C# Tại khung giữa chúng
ta chọn Console Application, đặt tên ứng dụng là MyFirstConsole trong
ô Name, chọn vị trí lưu ứng dụng tại ô Location:
Trang 7Nhấp OK Giao diện lúc này
Trang 8Trước khi viết các dòng mã C# đầu tiên, chúng ta lướt qua cửa sổ Solution
Explorer đ ể hiểu hơn về cấu trúc của một ứng dụng C# Console, giao diện
cửa sổ Solution Explorer (đã mở rộng tất cả các mục):
Trang 9Solution ‘MyFirstConsole’: là tập tin solution mức cao nhất Mỗi ứngdụng chỉ có một tập tin solution duy nhất có phần mở rộng là sln (trongtrường hợp này là MyFirstConsole.sln) Trong hình trên chúng ta khôngthấy tập tin này nhưng chúng ta có thể gõ cụm từ MyFirstConsoletrên
ô Search Solution Explorer:
Mỗi tập tin solution sẽ chứa các tham chiếu đến một hay nhiều tập tin dự án(project) Ở hình trên chúng ta thấy MyFirstConsole chứa 1 dự án (1
project)
Trang 10• MyFirstConsole: tên của tập tin dự án có phần mở rộng
là csproj (MyFirstConsole.csproj) Mỗi tập tin dự án chứa các tham
chiếu đến một hay nhiều tập tin chứa mã C# và các thành phần khác liên
quan đến dự án
• Properties: đây là một thư mục trong dự án Thư mục này chứa tập
tin AssembyInfo.cs – chứa các thông tin liên quan đến dự án như tên
tác giả, thời gian viết, v.v
• References: thư mục này chứa các tham chiếu đến các đoạn mã đãbiên dịch (compiled code) mà ứng dụng có thể sử dụng Khi các đoạn mãnày được biên dịch, nó sẽ được chuyển vào trong một assembly với mộttên duy nhất Các nhà phát triển dùng các assembly để đóng gói cácđoạn mã hữu ích để chia sẻ cho các nhà phát triển khác sử dụng trong
ứng dụng của họ
• App.config: là tập tin cấu hình, ứng dụng sẽ sử dụng tại thời điểm
chạy để thay đổi ứng xử của nó phù hợp với thông tin cấu hình
• Program.cs: là tập tin chứa mã C# được hiển thị trong cửa sổ soạnthảo Các đoạn mã trong tập tin này bao gồm mã do Visual Studio sinh ra
phương thức phải được định nghĩa trong một lớp nào đó
Chú ý: C# là ngôn ng ữ case-sensitive, tức là Main sẽ khác main, vì vậy
cần viết chính xác tên (biến, lớp, phương thức, v.v.) trong C#
Trang 11Chúng ta sẽ viết lệnh xuất dòng chữ “Hello World” trong hàm Main bằng
cách gọi phương thức WriteLine trong lớp Console:
1 Console.WriteLine("Hello World!");
Chúng ta để ý rằng trước phương thức WriteLine là tên lớp (Console) chứa
nó và dấu chấm Lớp Console được chứa trong namespace System.Chúng ta có thể tận dụng tính năng Microsoft IntelliSense để rút ngắnthời gian viết mã chương trình Đây là một tính năng rất hữu ích trong quá
trình viết mã có thể thấy rõ khi viết lệnh xuất dòng Hello World
Trong hàm Main tại dấu ngoặc { chúng ta gõ Enter để bắt đầu hàng mới và
viết câu lệnh đầu tiên Khi chúng ta gõ chữ C thì xuất hiện một danh sách
(còn gọi là danh sách IntelliSense):
Trong danh sách có tên lớp Console kèm theo dòng mô tả chức năng của
nó Chọn Console và gõ dấu chấm, một danh sách khác lại xuất hiện:
Trang 12Trong danh sách này chứa toàn bộ các thành phần củalớp Console Chọn WriteLine và khi mở ngoặc sẽ xuất hiện các phiên bản
khác nhau của WriteLine:
Gõ cụm từ Hello World ! và lưu ý phải đặt trong dấu ngoặc kép, đóngngoặc đơn và chấm phẩy – các lệnh trong C# khi kết thúc phải có dấu chấm
phẩy:
Biên dịch và chạy chương trình
Trang 13Biên dịch đoạn mã C# bằng cách vào thực đơn Build chọn Build
MyFirstConsole M ột cửa sổ Output sẽ xuất hiện bên dưới cửa sổ Code
and Text Editor với dòng thông tin:
Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped
Nếu cửa sổ Output không xuất hiện có thể vào thực
đơn View chọn Output
Nếu chương trình chúng ta bị lỗi, bên cạnh cửa sổ Output, chúng ta có thểxem danh sách các lỗi trong cửa sổ Error List (vào thực đơn View > Error
Trong cửa sổ Solution Explorer chọn tập tin dự
án MyFirstConsole (không phải tập tin solution) và chọn Show All
File trên thanh công c ụ của cửa sổ Solution Explorer:
Trang 14Sẽ xuất hiện hai mục bin và obj:
Hai mục này sẽ tham chiếu trực tiếp đến hai thư mục
tên bin và obj được Visual Studio tạo ra khi chúng ta biên dịch (Build)
chương trình và chúng chứa phiên bản thực thi (executable version) củachương trình và các tập tin khác dùng để biên dịch và debug ứng dụng
Mở rộng mục bin sẽ xuất hiện mục Debug Mở rộng mục Debug (thamchiếu đến thư mục Debug) sẽ thấy nhiều tập tin xuất hiện trong đó có tập
tin MyFirstConsole.exe là chương trình chạy khi chúng ta vào Debug >
Start Without Debugging:
Trang 15Namespace (không gian tên)
Namespace là một bộ chứa (container) dùng để chứa một số lượng lớn cácchức năng ( thường là lớp) trong NET Framework hay trong chương trình
và chống lại tình trạng xung đột trong trường hợp chia sẻ các thành phần (ví
dụ như lớp) có cùng tên (hai lớp có thể có cùng tên, ví dụ MyClass, nhưng
phải ở trong hai namespace khác nhau) Ví dụmột namespace tên System chứa lớp Console có phương
thức WriteLine mà chúng ta dùng để xuất dòng Hello World!
Có thể truy cập các thành phần trong namspace bằng cú pháp:
tên_namespace.thành_phần_cần_truy_cập
Ví dụ để dùng lớp Console chúng ta viết:
Trang 16Một cách giúp tiết kiệm thời gian cho người lập trình là khai
báo namespace chúng ta cần một lần bằng lệnh using tại vị trí đầu tiên
trong tập tin Program.cs
– Vào thực đơn Build chọn Build MyFirstConsole thì xuất hiện lỗi trong
cửa sổ Error List như sau:
– Nhấp đôi chuột vào dòng thông báo trong cửa sổ Error List sẽ nhảy đến
lệnh gây ra lỗi:
– Chỉnh sửa lại lệnh bằng cách thêm namspace System vào trước Console:
1 System.Console.WriteLine("Hello World !");
Assemblies
Trang 17Các lớp được biên dịch trong các assemblies Một assembly là một tập tin
có phần mở rộng là dll hay exe Một assembly có thể chứa nhiều lớp baogồm thư viện các lớp NET Framework (ví dụ lớp System.Console), điều
này có thể làm cho assembly trở nên rất lớn và khó quản lý
Để khắc phục gánh nặng cho một assembly, các lớp NET
Framework đ ược chia vào trong nhiều assemblies theo những chức năng
khác nhau như xử lý cơ sở dữ liệu, truy cập web services, xây dựng giao
diện đồ hoạ người dùng, v.v
Nếu muốn sử dụng các lớp trong một assembly nào đó, chúng ta phải thêmvào dự án một tham chiếu (reference) đến assembly đó Sau đó, dùng
lệnh using để có thể sử dụng các thành phần
trong namspace trong assembly này.
Một assembly có thể chứa các lớp chonhiều namespace; một namespace có thể được mở rộng đến
nhiều assemblies
Trong cửa sổ Solution Explorer của dự án MyFirstConsole mở rộng thư
mục Referenceschúng ta sẽ thấy các tham chiếu đến
các assemblies như Microsoft.CSharp, System,System.Core,…
Trang 18Tạo một ứng dụng đồ hoạ
Chúng ta đã làm quen với ứng dụng Console – thao tác trên cửa sổ dònglệnh Trong Visual Studio chúng ta cũng có thể tạo ra các ứng dụng giaodiện đồ hoạ Windows bằng cách cung cấp hai template: Windows Forms
Application xu ất hiện từ NET Framework 1.0 và WPF(Windows
Presentation Foundation) Application xu ất hiện từ NET Framework
3.0 cung c ấp nhiều tính năng đồ hoạ vượt trội so với Windows Form
Application và đ ược các chuyên gia khuyên dùng thay cho Windows
Forms Application Trong giáo trình này sẽ dùng WPF Application.
Khi làm việc với ứng dụng đồ hoạ, chúng ta có hai chế độ là Code
view và Design View Code view dùng để viết mã cho chương
trình, Design view dùng để thiết kế giao diện cho ứng dụng Chúng ta có
thể chuyển đổi qua lại hai chế độ này
Trang 19Chúng ta sẽ làm quen với ứng dụng đồ hoạ Windows thông qua tạo một
ứng dụng WPF Application chỉ gồm một form đơn giản chứa
một textbox để nhập tên người dùng và một button mà khi nhấp vào sẽ
hiển thị thông điệp xin chào cùng với tên người vừa nhập
Tạo ứng dụng WPF Application đầu tiên
Vào thực đơn File chọn New > Project Trong hộp thoại New
Project ch ọn Visual C#, WPF Application, đặt tên dự án
là MyFirstWPF trong ô Name, và chọn vị trí lưu ứng dụng trong
ô Location:
Trang 20Nhấn OK và giao diện gồm một WPF form (MainWindow) trong cửa
sổ Design view và một cửa sổ khác chứa mô tả XAML cho form:
Trang 21XAML là vi ết tắt của Extensible Application Markup Language và là
một ngôn ngữ tựa XMLđược dùng bởi ứng dụng WPF để định nghĩa bố cục(layout) và nội dung của một form Chúng ta có thể tự viết một mô
Trang 22tả XAML trong một trình soạn thảo được gọi là XAMLPad được cài
với Windows Software Development Kit (SDK)
Trong thanh Toolbox chọn và mở rộng Common WPF Controls sẽ xuất
hiện các thành phần (components) và các điều khiển (controls) có thể được
đặt trên một form trong ứng dụng WPF:
Nếu muốn xem nhiều điều khiển hơn có thể mở rộng phần All WPF
Trang 23Chọn Label và xem rong cửa sổ XAML xuất hiện dòng mô tả cho Label:
Chọn Label và trong thực đơn View chọn Properties Window Trong cửa
sổ Properties Window tại mục Text chọn kích cỡ chữ là 20px:
Trang 24Đóng cửa sổ Properties Window, lúc này kích cỡ chữ sẽ lớn hơn lúc trước:
Thông tin XAML của Label lúc này:
1 <Label Content="Label" HorizontalAlignment="Left" Margin="25,24,-176,0" VerticalAlignment="Top"Thuộc tính FontSize của Label là 20 Chúng ta có thể thay đổi giá trị
của FontSize đến 12 bằng cách gõ trực tiếp trong mô tả XAML
Trang 25Trong mô tả XAML, tại thuộc tính Content của Label đổi giá trị
từ Label thành Please enter your name, sự thay đổi sẽ được phản ánh
trên form:
Khi bạn chọn Label sẽ xuất hiện khung định dạng kích cỡ và chúng ta có thể
thay đổi kích cỡ Label tuỳ ý:
Trở lại thanh Toolbox (nếu đóng thanh Toolbox thì có thể mở lại bằng cách
vào View > Toolbox), trong Common WPF Controls chọn Textbox kéo
và thả vào form dưới Label Mở Properties Window của Textbox và thay
đổi giá trị của Name thành userName:
Trang 26Trở lại thanh Toolbox trong Common
WPF Controls ch ọn Button kéo và thả vào form bên phải Textbox Trong
cửa sổ Properties Window của Button thay đổi giá trị của Name là ok,
đổi giá trị của Content thành OK:
Nhấp chuột vào thanh tiêu đề của form MainWindow, trong cửa
sổ Properties Window của form đổi giá trị của Title thành Hello
Trang 27Form lúc này trông như sau:
Biên dịch chương trình bằng
cách vào Build > Build MyFirstWPF và được xác nhận thành công.
Trang 28Vào Debug > Start Without Debugging sẽ hiển thị form và chúng ta có
thể nhập tên vào Textbox nhưng lúc này button OK vẫn chưa có tác dụng
gì:
Đóng Form bằng cách nhấp nút Close (dấu X) Trong cửa sổ Solution
Explorer ch ọn và mở rộng mục MainWindow.xaml sau đó nhấp chuột vào MainWindow.xaml.cs sẽ đến cửa sổ Code and Text Editor với code
do Visual Studio sinh ra như sau:
Trang 29/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{ public MainWindow()
{ InitializeComponent();
} } }
Để đến cửa sổ Code and Text Editor chúng ta cũng có thể chọn bất kỳ vị
trí nào trong khung Design, kích chuột phải chọn View Code:
Trang 30Ở đây chúng ta thấy một số namspace được gọi bằng các lệnh using.
Lớp MainWindow được thừa kế từ lớp Window với một phương thức đặcbiệt gọi là constructor (phương thức khởi tạo) gọi một phương thức khác
{ InitializeComponent();
} }Thực tế code được phát sinh bởi Visual Studio rất nhiều, được mô tả
trong XAML nhưng đã được ẩn giấu trước chúng ta.
Trang 31Trong ứng dụng Console chúng ta đã biết phương thức Main như là điểmbắt đầu của ứng dụng, với ứng dụng WPF chúng ta vào cửa sổ Solution
Explorer và nh ấp đôi chuột vào mục App.xaml sẽ xuất hiện mã XAML:
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
Chúng ta thấy thuộc tính StartupUri tham chiếu đến tập
tin MainWindow.xaml Trong ứng dụng WPF, Main không xuất hiện mà sẽ
được ẩn và mã phát sinh cho Main dựa vào các thiết lập trong tập
tin App.xaml.
Trở lại Form trong chế độ Design (tab MainWindow.xaml), nhấp đôi chuột
vào nút OK để trở lại cửa sổ Code and Text
Editor (tab MainWindow.xaml.cs) và lần này xuất hiện thêm phương
từ Textbox vào trong phương thức ok_Click: