CƠ BẢN NGÔN NGỮ C#
Giới thiệu ngôn ngữ C#
Microsoft NET bao gồm hai phần chính: Framework và Integrated Development Environment (IDE) Framework cung cấp các công cụ và cơ sở cần thiết để phát triển ứng dụng, trong khi IDE tạo ra một môi trường thuận lợi cho việc triển khai ứng dụng trên nền tảng NET một cách nhanh chóng và dễ dàng Mặc dù có thể sử dụng trình soạn thảo đơn giản như Notepad và dòng lệnh để biên dịch và thực thi ứng dụng, nhưng phương pháp này tốn nhiều thời gian Do đó, việc sử dụng IDE là lựa chọn tốt nhất và dễ dàng nhất để phát triển ứng dụng.
Thành phần Framework là yếu tố quan trọng nhất trong NET, đóng vai trò cốt lõi và tinh hoa của môi trường phát triển IDE chỉ là công cụ hỗ trợ phát triển dựa trên nền tảng này Trong NET, tất cả các ngôn ngữ như C#, Visual C++ và Visual Basic.NET đều sử dụng chung một IDE.
Microsoft NET là nền tảng quan trọng cho việc phát triển và triển khai các ứng dụng phân tán thế hệ mới, bao gồm cả ứng dụng từ client đến server và các dịch vụ khác Nền tảng này cung cấp nhiều tính năng hữu ích cho các nhà phát triển.
Một mô hình lập trình cho phép nhà phát triển xây dựng các ứng dụng dịch vụ web và ứng dụng client với Extensible Markup Language (XML).
Tập hợp dịch vụ XML Web, như Microsoft NET My Services cho phép nhà phát triển đơn giản và tích hợp người dùng kinh nghiệm.
Chúng tôi cung cấp các máy chủ bao gồm Windows 2000, SQL Server và BizTalk Server, tất cả đều được tích hợp để hoạt động và quản lý các dịch vụ XML Web cùng các ứng dụng một cách hiệu quả.
Các phần mềm client như Windows XP và Windows CE hỗ trợ các nhà phát triển trong việc phân phối và nâng cao trải nghiệm người dùng qua nhiều dòng thiết bị khác nhau.
Visual Studio NET là một công cụ hỗ trợ mạnh mẽ giúp phát triển dịch vụ Web XML và ứng dụng trên nền tảng Windows cũng như web một cách dễ dàng và hiệu quả.
.NET Framework là một nền tảng giúp đơn giản hóa việc phát triển ứng dụng trong môi trường Internet phân tán Nó cung cấp một môi trường lập trình hướng đối tượng vững chắc, cho phép mã nguồn được lưu trữ và thực thi cục bộ, đồng thời hỗ trợ thực thi từ xa Nền tảng này giảm thiểu việc đóng gói phần mềm và xung đột phiên bản, đồng thời đảm bảo an toàn cho mã nguồn, kể cả mã từ bên thứ ba tuân thủ kiến trúc NET .NET Framework cũng loại bỏ lỗi trong việc thực thi script và môi trường thông dịch, giúp các nhà phát triển có kinh nghiệm dễ dàng làm việc với nhiều loại ứng dụng khác nhau, từ ứng dụng Windows đến ứng dụng web Cuối cùng, nó xây dựng tất cả thông tin dựa trên tiêu chuẩn công nghiệp để đảm bảo khả năng tích hợp mã nguồn trên NET với các mã nguồn khác.
.NET Framework bao gồm hai thành phần chính: Common Language Runtime (CLR) và thư viện lớp NET Framework CLR là nền tảng cốt lõi của NET Framework, hoạt động như một agent quản lý mã nguồn trong quá trình thực thi Nó cung cấp các dịch vụ thiết yếu như quản lý bộ nhớ, quản lý tiểu trình và quản lý từ xa, đồng thời khuyến khích việc sử dụng kiểu an toàn và đảm bảo tính chính xác của mã nguồn Khái niệm quản lý mã nguồn là nguyên tắc cơ bản của runtime, với mã nguồn hướng tới runtime được gọi là mã nguồn được quản lý (managed code), trong khi mã nguồn không hướng tới runtime được gọi là mã nguồn không được quản lý (unmanaged code).
Thư viện lớp trong NET Framework là một tập hợp các kiểu dữ liệu hướng đối tượng được thiết kế để tái sử dụng, hỗ trợ phát triển đa dạng ứng dụng từ ứng dụng dòng lệnh truyền thống đến các ứng dụng giao diện đồ họa (GUI) và các ứng dụng hiện đại như Web Form và dịch vụ XML Web thông qua ASP.NET.
CLR thực hiện quản lý bộ nhớ, quản lý tiểu trình, thực thi mã nguồn và xác nhận tính an toàn của mã nguồn Những chức năng này tạo nền tảng quan trọng cho việc chạy các mã nguồn được quản lý trên CLR.
Do chú trọng đến bảo mật, các thành phần được quản lý sẽ nhận được những mức độ quyền hạn khác nhau dựa trên các yếu tố nguyên thủy như kết nối Internet, hệ thống mạng trong nhà máy, hoặc máy tính cục bộ Điều này có nghĩa là một thành phần được quản lý có thể được cấp quyền hoặc không được cấp quyền thực hiện các thao tác như truy cập tập tin, truy cập registry, và các chức năng nhạy cảm khác.
CLR thúc đẩy việc mã nguồn thực hiện truy cập an toàn, cho phép người sử dụng giới hạn quyền truy cập của các ứng dụng nhúng trong trang web Ví dụ, các ứng dụng này có thể chạy hoạt hình hoặc phát nhạc nhưng không được phép truy cập dữ liệu riêng tư, tập tin hệ thống hoặc mạng Nhờ vào đặc tính bảo mật của CLR, phần mềm đóng gói trên Internet có thể sở hữu nhiều tính năng mà không làm ảnh hưởng đến sự an toàn của hệ thống.
CLR nâng cao hiệu suất thực thi mã nguồn thông qua việc đảm bảo tính chính xác và xác nhận mã nguồn, dựa trên Common Type System (CTS) CTS cho phép mã nguồn được quản lý tự mô tả, giúp phân biệt giữa Microsoft và các trình biên dịch ngôn ngữ của bên thứ ba trong việc tạo ra mã nguồn tương thích với CTS Điều này cho phép mã nguồn quản lý sử dụng các kiểu dữ liệu khác nhau một cách an toàn và chính xác, đồng thời thúc đẩy việc sử dụng kiểu dữ liệu một cách nghiêm ngặt.
Môi trường runtime được quản lý tự động xử lý layout của đối tượng và quản lý tham chiếu đến đối tượng, đồng thời giải phóng chúng khi không còn sử dụng Quá trình quản lý bộ nhớ tự động này giúp khắc phục hai vấn đề phổ biến trong ứng dụng: thiếu bộ nhớ và tham chiếu bộ nhớ không hợp lệ.
Runtime không chỉ được phát triển cho phần mềm tương lai mà còn hỗ trợ hiệu quả cho các ứng dụng hiện tại và trước đây Khả năng tương tác giữa mã nguồn được quản lý và mã nguồn không được quản lý giúp các nhà phát triển duy trì và sử dụng các thành phần quan trọng từ COM và DLL.
Môi trường lập trình
Sử dụng Notepad soạn thảo
Bước 1: Soạn thảo tập tin và lưu với tên C:\ChaoMung.cs có nội dung như sau class ChaoMung
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2008 ' System.Console.WriteLine("Chao mung ban den voi C# 2008 ") ; System.Console.ReadLine() ;
Bước 2: Vào menu Start | All Programs | Microsoft Visual Studio 2008 | Visual Studio Tools | Visual Studio 2008 Command Prompt
Gõ lệnh biên dịch tập tin ChaoMung.cs sang tập tin ChaoMung.exe C:\> csc /t:exe /out:chaomung.exe chaomung.cs
Chạy tập tin ChaoMung.exe và được kết quả như sau :
Sử dụng Micosoft Visual Studio 2008 để tạo chương trình
Bước1: Khởi động Visual Studio 2008
Start | All Programs | Microsoft Visual Studio 2008 | Microsoft Visual Studio 2008
Bước 2: Vào menu File | New | Project
Mặc định: Visual Studio 2008 (Visual Studio NET) sẽ tạo ra tập tin Program.cs chứa một namespace tên ChaoMung và trong namespace này chứa một class tên Program
Bước 4: trong phương thức Main, gõ đoạn mã lệnh sau
// Xuat ra man hinh chuoi thong bao 'Chao mung ban den voi C# 2008 ' System.Console.WriteLine("Chao mung ban den voi C# 2008 ") ; System.Console.ReadLine() ;
Bước 5: Để chạy chương trình, nhấn F5 hoặc nhắp vào nút Ứ ng dụng Console
Ứng dụng console là một ví dụ đơn giản, giao tiếp với người dùng thông qua bàn phím mà không có giao diện người dùng (UI), tương tự như các ứng dụng phổ biến trên Windows Khi phát triển các ứng dụng nâng cao trên Windows hoặc Web, chúng ta sẽ sử dụng giao diện đồ họa Tuy nhiên, để hiểu rõ về ngôn ngữ C# thuần tuý, việc viết các ứng dụng console là phương pháp hiệu quả nhất.
Trong hai ứng dụng đơn giản, chúng ta đã sử dụng phương thức WriteLine() của lớp Console để xuất chuỗi tham số vào màn hình lệnh hoặc màn hình DOS, cụ thể là chuỗi “Chao Mung”.
.NET cung cấp một thư viện đồ sộ gọi là FCL (Framework Class Library), trong đó Console chỉ là một trong hàng ngàn lớp Mỗi lớp đều có tên riêng, tạo ra hàng ngàn tên như ArrayList, Dictionary, FileSelector, khiến cho lập trình viên khó nhớ hết Điều này có thể dẫn đến việc tạo ra lớp trùng tên, ví dụ như khi phát triển ứng dụng, nếu lập trình viên tạo một lớp từ điển và đặt tên là Dictionary, sẽ xảy ra tranh chấp khi biên dịch do C# chỉ cho phép một tên duy nhất.
Khi đổi tên lớp từ điển thành myDictionary, việc phát triển ứng dụng sẽ trở nên phức tạp và cồng kềnh Điều này có thể dẫn đến những khó khăn lớn cho các nhà phát triển khi đạt đến một mức độ phát triển nhất định.
Giải pháp cho vấn đề này là tạo ra một namespace, giúp hạn chế phạm vi của một tên, khiến cho tên này chỉ có ý nghĩa trong vùng đã được định nghĩa.
Trong lập trình, một kỹ sư cần phải được xác định theo lĩnh vực cụ thể, ví dụ như kỹ sư cầu đường, cơ khí hay phần mềm Điều này giúp phân biệt rõ ràng giữa các chuyên ngành khác nhau, như trong trường hợp của lập trình viên C#, Tùng có thể được gọi là CauDuong.KySu, CoKhi.KySu hay PhanMem.KySu Namespace đóng vai trò quan trọng trong việc giới hạn phạm vi của các từ, tạo ra một không gian mà trong đó tên gọi trở nên có ý nghĩa và dễ hiểu hơn.
Tương tự như vậy ta cứ tạo các namespace để phân thành các vùng cho các lớp trùng tên không tranh chấp với nhau.
Similarly, the NET Framework includes a Dictionary class within the System.Collections namespace, and we can create another Dictionary class in the ProgramCSharp.DataStructures namespace without any conflict between the two.
Chương trình C# đơn giản là bước khởi đầu hoàn hảo để tìm hiểu ngôn ngữ C# và xây dựng nền tảng cho các chương tiếp theo Trong chương đầu tiên, chúng ta sẽ khám phá một chương trình C# cơ bản nhất, với cấu trúc của lớp ChaoMung.
// Xuat ra man hinh System.Console.WriteLine(“Chao Mung”);
Biến, hằng, toán tử
Biến là một vùng lưu trữ có kiểu dữ liệu nhất định, như trong ví dụ với các biến x và y Chúng có thể được gán giá trị và thay đổi giá trị trong quá trình thực hiện lệnh Để tạo một biến, cần khai báo kiểu dữ liệu và gán tên duy nhất cho nó Biến có thể được khởi tạo giá trị ngay khi khai báo hoặc nhận giá trị mới bất cứ lúc nào trong chương trình Ví dụ sau đây sẽ minh họa cách sử dụng biến trong lập trình.
System.Console.WriteLine(“Sau khi khoi tao: bien1 ={0}”, bien1); bien1 = 15;
System.Console.WriteLine(“Sau khi gan: bien1 ={0}”, bien1);
Sau khi khoi tao: bien1 = 9
Gán giá trị xác định cho biến
C# đòi hỏi các biến phải được khởi tạo trước khi được sử dụng
Hằng là một loại biến đặc biệt có giá trị không thay đổi trong suốt chương trình Mặc dù biến là công cụ mạnh mẽ, việc sử dụng hằng yêu cầu đảm bảo rằng giá trị của nó sẽ không bị thay đổi.
Khi thiết lập một chương trình thí nghiệm hóa học liên quan đến nhiệt độ sôi và nhiệt độ đông của nước, cần khai báo hai biến là DoSoi và DoDong Để đảm bảo rằng giá trị của hai biến này không bị thay đổi hoặc gán lại, việc sử dụng biến kiểu hằng là cần thiết Điều này giúp ngăn chặn việc gán giá trị không mong muốn cho các biến quan trọng trong chương trình.
Hằng được phân thành ba loại: giá trị hằng (literal), biểu tượng hằng (symbolic constants), kiểu liệu kê (enumerations).
Một biểu tượng hằng cần được khởi tạo ngay khi khai báo, và chỉ được khởi tạo một lần duy nhất trong toàn bộ chương trình mà không được phép thay đổi Ví dụ: const int DoSoi = 100; class MinhHoaC3.
{ const int DoSoi = 100; // Độ C const int DoDong 0; // Độ C
System.Console.WriteLine( “Do dong cua nuoc {0}”, DoDong ); System.Console.WriteLine( “Do soi cua nuoc {0}”, DoSoi );
Giá trịhằng: ta có một câulệnh gán như sau: x = 100;
Giá trị 100 là giá trị hằng Giá trị của 100 luôn là 100 Ta không thể gán giá trị khác cho 100 được
Biểu tượng hằng: gán một tên cho một giá trị hằng, để tạo một biểu tượng hằng dùng từ khóa const và cú pháp sau:
= ;
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 (thường được gọi là danh sách liệt kê)
Trong ví dụ 3.4, có hai biểutượnghằng có quan hệvới nhau: const int DoDong = 0; const int DoSoi = 100;
Để mở rộng danh sách các hằng số, chúng tôi muốn bổ sung thêm một số giá trị mới, bao gồm: const int DoNong = 60; const int DoAm = 40; và const int DoNguoi = 20.
Các biểu tượng hằng trong C# thể hiện mối quan hệ liên quan đến nhiệt độ của nước, nhưng việc khai báo từng hằng có thể gây cồng kềnh và thiếu sự liên kết Để khắc phục vấn đề này, C# cung cấp kiểu liệt kê (enum) với tên gọi NhietDoNuoc, giúp tổ chức và quản lý các giá trị nhiệt độ một cách hiệu quả hơn.
Mỗi kiểu liệt kê trong lập trình có một kiểu dữ liệu cơ sở, thường là các kiểu dữ liệu nguyên như int, short, long, nhưng không chấp nhận kiểu ký tự Để khai báo một kiểu liệt kê, bạn cần tuân theo cú pháp quy định.
[thuộc tính] [bổ sung] enum [:kiểu cơ sở] {danh sách các thành phần liệt kê};
Thành phần thuộc tính và bổ sung là tự chọn sẽ được trình bày trong phần sau của sách
Trong phần này, chúng ta sẽ xem xét các thành phần còn lại của khai báo Một kiểu liệt kê được bắt đầu bằng từ khóa enum, theo sau là một định danh cho kiểu liệt kê.
// Khai báo kiểu liệt kê enum
The temperature readings are as follows: the freezing point is represented by NhietDoNuoc.DoDong, the human body temperature is indicated by NhietDoNuoc.DoNguoi, the humidity level is measured by NhietDoNuoc.DoAm, the hot temperature is shown through NhietDoNuoc.DoNong, and the boiling point is denoted by NhietDoNuoc.DoSoi.
Nhiet do dong: 0 Nhiet do nguoi: 20 Nhiet do am: 40 Nhiet do nong: 60 Nhiet do soi: 100
Dấu ‘.’ trong ví dụ trên được sử dụng để truy cập phương thức hoặc dữ liệu trong một lớp, cụ thể là phương thức WriteLine() Cách truy cập này diễn ra theo trình tự từ trên xuống, bắt đầu từ namespace System, sau đó là lớp Console, và cuối cùng là các phương thức hoặc thuộc tính của lớp đó.
Namespace có thể được chia thành các subnamespace, như trong namespace System có các subnamespace như Configuration, Collections và Data Namespace giúp tổ chức và phân tách các kiểu dữ liệu, đặc biệt trong các chương trình C# phức tạp, cho phép chúng ta xây dựng một kiến trúc namespace riêng mà không giới hạn chiều sâu của cây phân cấp Mục đích chính của namespace là hỗ trợ việc quản lý các kiến trúc đối tượng phức tạp.
Từ khóa "using" trong C# giúp chương trình trở nên gọn gàng hơn bằng cách không cần phải khai báo từng namespace cho từng đối tượng Sau từ khóa "using", bạn chỉ cần chỉ định một namespace hoặc subnamespace với cấu trúc phân cấp đầy đủ.
Khi bắt đầu chương trình C#, bạn có thể sử dụng dòng lệnh `using System;` để đơn giản hóa cú pháp Nhờ đó, khi làm việc với đối tượng Console, bạn chỉ cần viết `Console.` thay vì phải ghi đầy đủ là `System.Console.`.
Ví dụ: Dùng khóa using using System; class ChaoMung
//Xuat ra man hinh chuoi thong bao Console.WriteLine(“Chao Mung”);
Toán tử trong C# được biểu thị bằng các ký hiệu và được sử dụng để thực hiện các hành động khác nhau Ngôn ngữ lập trình này hỗ trợ nhiều kiểu dữ liệu cơ bản, đặc biệt là kiểu nguyên, với các loại toán tử phong phú như toán tử gán, toán tử toán học và toán tử logic.
Toán tử gán là một khái niệm quen thuộc trong lập trình, được sử dụng rộng rãi trong hầu hết các chương trình minh họa từ đầu sách Nó cho phép thay đổi giá trị của toán hạng bên trái bằng giá trị của toán hạng bên phải, và được coi là toán tử hai ngôi Đây là một trong những toán tử đơn giản và phổ biến nhất, dễ sử dụng trong quá trình lập trình.
Ki ể u d ữ li ệ u
C# là ngôn ngữ lập trình mạnh mẽ với khả năng khai báo kiểu dữ liệu cho mỗi đối tượng, giúp giảm thiểu lỗi lập trình bằng cách chỉ cho phép gán đúng kiểu dữ liệu Kiểu dữ liệu không chỉ xác định kích thước của đối tượng mà còn chỉ ra khả năng của nó, như đối tượng button có thể tương tác khi nhấn Giống như C++ và Java, C# có hai loại kiểu dữ liệu chính: kiểu xây dựng sẵn (built-in) do ngôn ngữ cung cấp và kiểu do người dùng định nghĩa (user-defined) mà lập trình viên tự tạo ra.
C# phân loại kiểu dữ liệu thành hai loại chính: kiểu dữ liệu giá trị và kiểu dữ liệu tham chiếu Sự phân loại này dựa trên cách lưu trữ trong bộ nhớ Kiểu dữ liệu giá trị được lưu giữ với kích thước thực trong bộ nhớ stack, trong khi đó, kiểu dữ liệu tham chiếu lưu địa chỉ trong stack nhưng đối tượng thực sự lại nằm trong bộ nhớ heap.
Việc lưu trữ các đối tượng có kích thước lớn trên bộ nhớ heap mang lại nhiều lợi ích Chương 4 sẽ phân tích chi tiết những ưu điểm và nhược điểm khi làm việc với kiểu dữ liệu tham chiếu Tuy nhiên, trong chương này, chúng ta sẽ chỉ tập trung vào các kiểu dữ liệu cơ bản và kiểu xây dựng sẵn.
Tất cả các kiểu dữ liệu được xây dựng sẵn trong lập trình đều là kiểu dữ liệu giá trị, ngoại trừ các đối tượng và chuỗi Ngược lại, tất cả các kiểu dữ liệu do người dùng định nghĩa, trừ kiểu cấu trúc, đều thuộc loại kiểu dữ liệu tham chiếu.
C# hỗ trợ kiểu con trỏ C++, tuy nhiên, chúng hiếm khi được sử dụng và chỉ trong trường hợp làm việc với mã lệnh không được quản lý (unmanaged code) Mã lệnh không được quản lý bao gồm các lệnh viết bên ngoài nền tảng NET, chẳng hạn như các đối tượng COM.
Kiểu dữ liệu xây dựng sẵn
Ngôn ngữ C# cung cấp các kiểu dữ liệu xây dựng sẵn hữu ích, tương thích với các tiêu chuẩn của ngôn ngữ lập trình hiện đại Mỗi kiểu dữ liệu trong C# được ánh xạ đến các kiểu dữ liệu của hệ thống xác nhận ngôn ngữ chung (Common Language Specification: CLS) trong MS.NET Sự ánh xạ này đảm bảo rằng các đối tượng được tạo ra trong C# có thể tương tác một cách hiệu quả với các đối tượng được phát triển bằng các ngôn ngữ khác trong môi trường NET, chẳng hạn như VB.NET.
Trong C#, mỗi kiểu dữ liệu có kích thước cố định và được xác nhận rõ ràng, khác với C++ Cụ thể, kiểu int trong C# luôn có kích thước 4 byte, vì nó được ánh xạ từ kiểu Int32 trong NET.
Bảng 4.1 sau sẽ mô tả một số các kiểu dữ liệu được xây dựng sẵn
Trong C#, các kiểu dữ liệu cơ bản bao gồm: byte (1 byte) là số nguyên dương không dấu từ 0-255; char (2 byte) dùng để lưu trữ ký tự Unicode; bool (1 byte) biểu diễn giá trị logic true/false; sbyte (1 byte) là số nguyên có dấu với giá trị từ -128 đến 127; và short (2 byte) là số nguyên có dấu với giá trị từ -32768 trở lên.
32767 ushort 2 Uịnt16 Số nguyên không dấu 0 – 65.535 int 4 Int32 Số nguyên có dấu –2.147.483.647 và
2.147.483.647 uint 4 Uint32 Số nguyên không dấu 0 – 4.294.967.295 float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E-
Kiểu dữ liệu số trong lập trình bao gồm các loại chính như float, double và decimal Float có độ chính xác khoảng 7 chữ số và giá trị nằm trong khoảng từ 1,5E-45 đến 3,4E+38 Double, với độ chính xác gấp đôi, cho phép khoảng giá trị từ 1,7E-308 đến 1,7E+308 và có thể chứa tới 15,16 chữ số có nghĩa Trong khi đó, kiểu decimal có độ chính xác lên đến 28 con số và được sử dụng chủ yếu trong các tính toán tài chính, yêu cầu phải có hậu tố “m” hoặc “M” sau giá trị.
Bảng 4.2 : Mô tả các kiểudữ liệu xây dựngsẵn
Trong C#, kiểu giá trị logic chỉ nhận hai giá trị là true hoặc false, không cho phép gán giá trị nguyên vào biến kiểu logic và không có chuyển đổi ngầm định nào Điều này khác với C/C++, nơi biến logic có thể nhận giá trị nguyên, với 0 tương ứng với false và các giá trị khác là true.
Chuyển đổi các kiểu dữ liệu
Các đối tượng của một kiểu dữ liệu có thể được chuyển đổi sang kiểu dữ liệu khác thông qua hai cơ chế: chuyển đổi ngầm định và chuyển đổi tường minh Chuyển đổi ngầm định diễn ra tự động do trình biên dịch thực hiện, trong khi chuyển đổi tường minh xảy ra khi chúng ta chủ động gán một giá trị cho kiểu dữ liệu khác.
Việcchuyển đổi giá trị ngầmđịnhđược thựchiện một cách tựđộng và đảm bảo là không mất thông tin Ví dụ, chúng ta có thể gán ngầmđịnh một sốkiểu short
Khi gán giá trị từ kiểu dữ liệu short (2 byte) sang kiểu int (4 byte), quá trình này diễn ra một cách ngầm định mà không làm mất dữ liệu Điều này là do mọi giá trị của short đều nằm trong phạm vi của int Ví dụ, khi gán short x = 10 cho int y, giá trị được chuyển đổi một cách an toàn và chính xác.
Khi thực hiện chuyển đổi từ số nguyên kiểu int sang kiểu short, chúng ta cần lưu ý rằng nếu giá trị của số nguyên lớn hơn 32.767, thông tin sẽ bị mất Trình biên dịch không tự động chuyển đổi từ int sang short, dẫn đến lỗi khi gán trực tiếp Để tránh lỗi này, chúng ta cần sử dụng phép ép kiểu tường minh, ví dụ: short x; int y = 500; x = (short) y; để đảm bảo quá trình biên dịch không gặp vấn đề.
Cấu trúc điều khiển
Câu lệnh phân nhánh if else hoạt động dựa trên một điều kiện cụ thể Điều kiện này là một biểu thức được kiểm tra ngay khi câu lệnh được thực thi Nếu điều kiện đúng, các câu lệnh trong thân của câu lệnh if sẽ được thực hiện.
Trong cấu trúc câu điều kiện if else, phần else là tùy chọn và chỉ được thực hiện khi điều kiện của if không đúng Khi sử dụng câu lệnh if else, chỉ có một trong hai phần if hoặc else sẽ được thực hiện.
Ta có cú pháp câu điều kiện if else sau: if (biểu thức điều kiện)
[else
]
Khi trong thân của câu lệnh if hoặc else có nhiều hơn một lệnh, các lệnh này cần được bao trong một khối lệnh, tức là phải nằm trong dấu ngoặc nhọn { } Ngoài ra, do else là phần tùy chọn, nên nó nên được đặt trong dấu ngoặc vuông [ ].
Ví dụ: using System; class ExIfElse
{ int var1 = 10; int var2 = 20; if ( var1 > var2)
Console.WriteLine( “var1: {0} > var2:{1}”, var1, var2);
Console.WriteLine( “var2: {0} > var1:{1}”, var2, var1);
Console.WriteLine( “Gan gia tri var1 cho var2”);
Console.WriteLine( “Tang bien var1 len mot ”);
Console.WritelLine( “Var1 = {0}, var2 = {1}”, var1, var2);
Console.WriteLine( “Thiet lap gia tri var1 = var2” );
Console.WriteLine( “var1 = {0}, var2 = {1}”, var1, var2 );
Gan gia tri var1 cho var2
Tang bien var1 len mot
C ấ u trúc l ặ p
C# cung cấp nhiều câu lệnh lặp như for, while và do while, cùng với câu lệnh foreach, một tính năng mới mẻ cho lập trình viên C/C++ nhưng quen thuộc với người lập trình VB Ngoài ra, ngôn ngữ này cũng hỗ trợ các câu lệnh điều khiển như goto, break, continue và return.
Lệnh nhảy goto là một lệnh đơn giản cho phép chương trình nhảy vô điều kiện đến một vị trí thông qua tên nhãn Tuy nhiên, việc sử dụng lệnh này thường làm mất đi tính cấu trúc của thuật toán, dẫn đến những chương trình phức tạp và khó hiểu, được gọi là “mì ăn liền” trong giới lập trình Do đó, hầu hết các lập trình viên có kinh nghiệm thường tránh sử dụng lệnh goto.
Nhãn là một định danh đi kèm với dấu hai chấm (:), thường được sử dụng trong lệnh goto liên kết với một điều kiện cụ thể Ví dụ, đoạn mã trong phần 3.10 sẽ minh họa cách sử dụng lệnh nhảy goto trong chương trình.
Ví dụ: using System; public class UsingGoto
0}”,i); i++; if ( i < 10 ) goto lap; // nhãy về nhãn lap return 0;
Khi vẽ lưu đồ cho một chương trình sử dụng nhiều lệnh goto, chúng ta sẽ thấy nhiều đường chồng chéo, giống như sợi mì Do đó, mã nguồn có chứa lệnh goto thường được gọi là “spaghetti code”.
Việc tránh dùng lệnh nhảy goto trong chương trình hoàn toàn thực hiện được, có thể dùng vòng lặp while để thay thế hoàn toàn các câu lệnh goto
Vòng lặp while là một cấu trúc lập trình cho phép thực hiện một khối lệnh trong khi điều kiện được xác định là đúng Cú pháp sử dụng vòng lặp while được thể hiện như sau: while (Biểu thức).
Vòng lặp while yêu cầu một biểu thức điều kiện trả về giá trị boolean true hoặc false để thực hiện các lệnh Khi cần thực hiện nhiều câu lệnh trong vòng lặp, các lệnh này phải được đặt trong một khối lệnh Ví dụ 3.11 minh họa cách sử dụng vòng lặp while.
Vòng lặp do while được sử dụng khi chúng ta muốn thực hiện một hành động trước và sau đó kiểm tra điều kiện, khác với vòng lặp while chỉ chạy khi điều kiện đúng Cú pháp của vòng lặp này là: do { hành động } while (điều kiện).
Vòng lặp while và do while có sự khác biệt quan trọng; trong khi vòng lặp while có thể không thực hiện câu lệnh nào nếu điều kiện không thỏa mãn, thì vòng lặp do while đảm bảo ít nhất một lần thực hiện các câu lệnh bên trong Điều này xảy ra vì trong lần đầu tiên vào vòng lặp do while, điều kiện chưa được kiểm tra.
Vòng lặp for bao gồm ba phần chính:
Khởi tạo biến đếm vòng lặp
Kiểm tra điều kiện biến đếm, nếu đúng thì sẽ thực hiện các lệnh bên trong vòng for
Cú pháp sửdụng vòng lặp for như sau: for ([ phần khởi tạo] ; [biểu thức điều kiện]; [bước lặp])
Vòng lặp foreach cho phép lặp qua các phần tử của một tập hợp hoặc mảng, là một tính năng mới không có trong ngôn ngữ C/C++ Cú pháp chung của câu lệnh foreach được trình bày như sau: foreach ( in ).
Vòng lặp foreach cho phép lặp qua tất cả các phần tử trong một mảng hoặc tập hợp theo thứ tự sắp xếp Khi đến phần tử cuối cùng, chương trình sẽ tự động thoát khỏi vòng lặp.
XÂY DỰNG ỨNG DỤNG WINDOWS FORM
Sử dụng Visual Studio 2008
Start | All Programs | Microsoft Visual Studio 2008 | Microsoft Visual Studio 2008
Bước 2: Vào menu File | New | Project
- Mở hộp ToolBox: Menu View | ToolBox chứa các control
- Mở cửa sổ Properties: Menu View | Properties chứa thuộc tính
- Mở cửa sổ Solution Explorer: Menu View | Solution Explorer cửa sổ Project xuất hiện.
Bước 4: Thiết kế Form – Viết code
- Thiếtkế form: Nhắp vào View Designer (trong cửa số Solution Explorer)
- Viết code: Nhắp vào View Code (trong cửasố Solution Explorer)
Bước 5: Để chạychương trình, nhấn F5 hoặcnhắp vào nút Để dừngchương trình, nhấn Shift + F5 hoặcnhắp vào nút
* Các thao tác với Project / Solution
C3 Chọn công cụ New Project trên thanh Standart
C1 Vào menu File | Open | Project /
C1 Vào menu File | Save All
C2 Chọn công cụ Save All trên thanh Standart Đóng Solution: Vào menu File | Close Solution
Màn hình giao diện của Windows Forms
Cửa sổ thiết kế Form (Designer):
C1 Vào menu Project | Add New Item …
C2 Chọn công cụ Add New Item trên thanh Standart b2 Khai báo
Thêm một Form có sẵn vào Project: b1
Vào menu Project | Add Existing Item … b2
Xóa bỏ một Form đang có trong Project: b1 Chọn Form cần gỡ bỏ (ở cửa sổ Solution
Explorer) b2 Vào menu Edit | Delete
-Vào menu File | Save Form.cs
-Ta đem “bỏ vào” form các đối tượng như: Label, TextBox, Button, …
+ Label, TextBox, Button, …đượcgọi là control hay còn gọi là component + Form được gọi là control “chứa”
- Khi thay đổi nội dung của Label, TextBox, Button, … ta thay đổi vào Text Text được gọi là Property của control.
Các control cơ bả n
-Control là lớp (class) các thành phần được thêm vào Windows Forms để tương tác giữa người sử dụng với Windows
- Có rất nhiều loại control trong Windows Forms như: Label, TextBox, ListBox,
-Các control sử dụng trên Windows Forms dùng namespace
- Properties là những thông tin mà ta có thể thay đổi nội dung, cách trình bày … của ngườithiếtkếđểứng dụng vào control
-Mỗi lớp (class) có nhiều property khác nhau Tuy nhiên, vẫn có một số property giống nhau được xây dựng từ lớp ban đầu
* Bảng trình bày các thuộc tính (Properties) giống nhau
Anchor được xác định bởi 4 hướng: trên, dưới, trái, phải, giúp cố định vị trí Khi control chứa anchor thay đổi kích thước, anchor cũng sẽ thay đổi kích thước nếu các hướng trái, phải, trên, dưới được cố định.
BackColor Màu nền của control
Bottom Là khoảng cách theo chiều dọc từ cạnh đáy của control đến cạnh trên của control chứa nó
Dock Giốngnhư Anchor nhưng việccốđịnh (neo) này theo một cạnh nào đó của control(hoặccả 4 cạnh)với control chứa nó
Enabled Control được phép tương tác (True) hay không được phép tương tác (False)) vớingười dùng
ForeColor Màu chữ của control.
Height Là chiều cao của control tính từ cạnh trên của control đến cạnh dưới của control.
Left Là khoảng cách theo chiều ngang từ cạnh trái của control đến cạnh trái của control chứa nó
Parent Chỉ đến control chứa control hiện hành
Right Là khoảng cách theo chiều ngang từ cạnh phải của control đến cạnh trái của control chứa nó.
TabIndex Thứ tự focus khi nhấn phím Tab (trên bàn phím) của control so với các control khác cùng nằm trong control chứa nó.
TabStop Chỉ định control có được phép “bắt” (True) / không được phép
“bắt” (False) phím Tab Nếu không được phép thì TabIndex cũng không dùng được.
Tag Là nhãn phân biệt giữa các control giống nhau trong cùng form Text Nội dung hiện trong control
Top Là khoàng cách theo chiều dọc từ cạnh trên của control đến cạnh trên của control chứa nó.
Visible Cho phép control hiện (True) / không hiện (False) khi chạy ứng dụng.
Width Là chiều rộng của control tính từ cạnh trái của control đến cạnh phải của control.
Bảng trình bày các phương thức (Method) xử lý trên chuỗi
ResetText() Xóa nội dung Text
Trim() Cắt bỏ khoảng trắng thừa hai bên chuỗi
- Hiển thị chuỗi ký tự không thay đổi trên form (nhãn)
-Rê chuột và vẽ Label trên form
AutoSize Điềuchỉnh kích thước đối tượng cho vừavớichiều dài chuỗi ký tự
Name Quy định font chữ chovăn bản
Bold True: đậm / False: bỏ đậm
Italic True: nghiêng / False: bỏ nghiêng
Size Quy định cỡ chữ chovăn bản
Underlin e True: gạch dưới / False: bỏ gạch dưới
TextAlign Canh lề (Left / Center / Right)
-Dùng trình bày vănbản và cho phép người dùng được thay đổi nội dungvăn bản
-Công dụng chính là cho người dùng nhậpvăn bản.
- Rê chuột và vẽ TextBox trên form
PasswordCh ar Quy định ký tựhiển thị cho ô mậtkhẩu.
Multiline True: hiện thanh cuộn / False: không hiện thanh cuộn
ScrollBars Thanh cuộn (None / Horizontal / Vertical / Both)
-Khi nhắp chuột lên button, chương trình nhận được tín hiệu Click và lệnh được thi hành
-Rê chuột và vẽ Button trên form.Thuộc tính:
Text Nhập nội dung vào Button
-Cho phép người dùng chọn hoặc không chọn
-Rê chuột và vẽ CheckBox trên form
Checked Không có dấu check (False) / Có dấu check (True)
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 3.1 như sau:
+ Username vào TextBox Tên đăng nhập (Name: txtUser)
+ Password vào TextBox Mật khẩu (Name: txtPass)
-Chọn hoặc không chọn ô CheckBox Ghi nhớ (Name: chkNho)
- Nhắp button Đăng nhập thì hiện ra hộp thông báo chứa Tên đăng nhập, Mật khẩu; Và
“Bạn có ghi nhớ” (nếu chkNho có đánhdấu chọn)
-Nhắp button Xóa thì xóa trống TextBox Tên đăng nhập và TextBox Mật khẩu, đồng thời di chuyển con trỏ vào txtUser
-Nhắp button Dừng thì dừngchương trình
-Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
Để hiển thị thông tin đăng nhập, nhấp đúp vào nút "Đăng nhập" và thêm đoạn mã sau: `string thongbao; thongbao = "Tên đăng nhập là: "; thongbao += this.txtUser Text; thongbao += "\n\rMật khẩu là: "; thongbao += this.txtPass.Text; if (this.chkNho.Checked == true) { thongbao += "\n\rBạn có ghi nhớ."; }`.
} MessageBox.Show(thongbao,"Thông báo");
-Nhắp đúp vào button Xóa, thêm đoạn code sau: this.txtUser.Clear(); this.txtPass.Clear(); this.txtUser.Focus();
- Nhắp đúp vào button Dừng, thêm đoạn code sau:
+ Có thể thay button Xóa bằng button Reset với đoạn code như sau: this.txtUser.ResetText(); this.txtPass.ResetText(); this.txtUser.Focus();
MessageBox.S how: hiện hộp thông báo
MessageBox.Show("Thông báo" , "Tiêu đề"); MessageBox.Show("Thông báo", "Tiêu đề", Buttons, Icon);
+ Buttons (nút lệnh): MessageBoxButtons.OK
MessageBoxButtons.OKCancel MessageBoxButtons.YesNo MessageBoxButtons.YesNoCancel
MessageBoxIcon.Information MessageBoxIcon.Question MessageBoxIcon.Warning + DialogResult (kết quả trả về):
Dừngchương trình: this.Close(); Application.Exit();
-Sự kiện là những phản ứng của đối tượng Nói cách khác, sự kiện là những tín hiệu phát ra khi người dùng thao tác trên đối tượng
Sự kiện đóng vai trò quan trọng trong việc giúp lập trình viên nhận diện và xử lý các tín hiệu, từ đó phản hồi hiệu quả cho người dùng Điều này tạo ra sự nhịp nhàng và mượt mà cho chương trình, nâng cao trải nghiệm người dùng.
Bảng trình bày các sự kiện(Events) của control
Click Gọi đến khi control bị Click Trong một vài control, event này cũngxảy ra khi người dùng nhấn phím Enter
DoubleClic k Gọi đến khi control bị Double-Click Trong một vài control, event này không báo giờ đượcgọi Ví dụ: control Button
DragDrop Gọiđến khi việc “Drag and Drop” được hoàn tất.
DragEnter Gọi đến khi đối tượng vừa được “Drag” đến biên của control DragLeave Gọi đến khi đối tượng vừa được “Drag” ra ngoài biên của control
DragOver Gọi đến khi đối tượng được “Drag” bên trong control
KeyDown Gọiđến khi vừa bấm một phím bấtkỳtừ 1 control đang focus
Sựkiện này luôn đượcgọi trước sự kiện KeyUp
KeyPress Gọi đến khi vừa bấm một phím bất kỳ từ 1 control được focus Sự kiện này được gọi sau sự kiện KeyUp
KeyUp Gọi đến khi vừa bấm một phím bất kỳ rồi thả ra từ 1 control đang focus
Sự kiện này luôn được gọi sau sự kiện KeyDown
GotFocus Gọi đến khi control được focus
LostFocus Gọiđến khi control bị mất focus
MouseDow n Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột được nhắp nhưng chưa thả ra
MouseMov e Gọiđến khi con trỏchuột đi qua 1 control
MouseUp Gọi đến khi con trỏ chuột nằm trên 1 control và nút chuột vừa được thả.
Paint Gọi đến khi control được vẽ
Validated Gọi đến khi control focus, property CaucesValidation được đặt là true và sau khi gọi việc kiểm tra bằng Validating
Validating Gọi đến khi control mất focus, property CaucesValidation được đặt là true
- Dùng để hiển thị một danh sách các lựa chọn
-Rê chuột và vẽ ListBox trên form
Items Các mục giá trị trong ListBox
Add("chuỗi") Thêm một mụcgiá trị là "chuỗi"
ToString() Trả về chuỗi ký tự được chọn
*Nhập giá trị vào ListBox: .Items.Add ("Chuỗi") ;
*Lấy giá trị trong ListBox: .SelectedItem.ToString() ;
*Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là Vi Du 4.1 như sau:
-ListBox lstWeb (Liên kết website) chứa các giá trị:
- TextBox txtKQ (chứa kết quả) để trống
-Nhắp button btnOk (Ok) sẽ hiện trong txtKQ tên website được chọn ở lstWeb
-Nhắp button btnReset (Reset) sẽ xóa trống txtKQ
- Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
-Nhắp đúp vào button Ok rồi thêm đoạn code sau: this.txtKQ.Text = "Bạn đã chọn website "; this.txtKQ.Text + this.lstWeb.SelectedItem.ToString();
-Nhắp đúp vào button Reset rồi thêm đoạn code sau: this.txtKQ.ResetText();
* Cảitiến: Ta có thể đưa các giá trịcủa lstWeb trong Form1_Load
+ Thiết kế lại form như sau
To add items to a form list in your application, double-click on the form background and enter the following code: `this.lstWeb.Items.Add("Tuổi trẻ"); this.lstWeb.Items.Add("Thanh niên"); this.lstWeb.Items.Add("VNExpress"); this.lstWeb.Items.Add("Dân trí"); this.lstWeb.Items.Add("Công an");` This code will populate the list with various news sources, and it will also set "Tuổi trẻ" as the selected item.
-Dùng đểhiểnthị một danh sách các lựachọn/ hoặcnhậpvào một giá trị.
-Rê chuột và vẽ ComboBox trên form
DisplayMemb er Gán nội dung thểhiện trên ComboBox
Items Liệt kê các mục giá trị trong ComboBox
SelectedItem Lấy Item được chọn
SelectedText Lấy nội dung thể hiện trên ComboBox từ DisplayMember SelectedValue Lấygiá trịtừ ValueMember
ValueMember Gán giá trị cho ComboBox
Khởitạomột ứngdụng Windows Forms Application, lưuvới tên là
Thực hiện giống như Ví dụ 4.1, nhưng thay ListBox bằng ComboBox cbWeb
-Dùng để chọn một trong các lựa chọn trong danh sách
- Rê chuột và vẽ RadioButton trên form
Checked Không có dấu chọn (False) / Có dấu chọn (True)
-Rê chuột và vẽ GroupBox trên form
BackgroundImageLay out None / Tile / Center / Stretch / Zoom
* Khởi tạo một ứng dụng Windows Forms Application, lưu với tên là:
-Nhập họ và tên vào TextBox txtHoTen
+ Radio Button (rad2): chữ HOA
- Nhắp vào Button Kết quả (btnKQ) sẽ in họ và tên bằng kiểu chữ được chọn trong TextBox txtKQ
-Nhắp vào Button Xóa (btnXoa) sẽ xóa trống txtHoTen, txtKQ, rad1 được chọn và đưa con trỏ vào ô TextBox txtHoTen
-Thiết kế Form như yêu cầu, trong đó form có các thuộc tính sau:
Menu và ToolBar
- Tạo ra toolbar b Tạo ToolStrip:
-Kéo control ToolStrip vào trong form
- Bấm vào ToolStrip vừa tạo, ta có thể tạo ra các tool (công cụ) như: Label, TextBox,
* Tạo ứng dụngWindows Forms Application như hình
* Hướng dẫn: dùng RichTextBox, MenuStrip và ToolStrip.
Common Dialog (Hộp thoại dùng chung)
-Tạo ra hộp thoại Font b Tạo FontDialog:
-Tạo ra hộpthoại Open File b Tạo OpenFileDialog:
- Tạo ra hộp thoại Save File b Tạo SaveFileDialog:
-Xem trước khi in b Tạo SaveFileDialog:
-Tạo ra hộp thoại Print File b Tạo PrintDialog:
-Tạo ra hộp thoại Browser b Tạo FolderBrowserDialog: