ĐHQG HCM – TRƯỜNG ĐH KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN C# căn bản Lập trình ứng dụng quản lý 1 Ngô Chánh Đức Nội dung .NET Framework C# cơ bản Coding convention Hướng đối tượng Collection Delegate 9/26/2017 C# căn bản - LTUDQL1 2 .NET Framework 9/26/2017 C# căn bản - LTUDQL1 3 Giới thiệu Ra đời năm 2002 cùng với bộ công cụ lập trình Visual Studio .NET Sử dụng kỹ thuật hướng đối tượng Hỗ trợ chuẩn Unicode Thi hành trên máy ảo CLR (Common Language Runtime) Bao gồm hơn 5000 lớp đối tượng Cung cấp bộ trình điều khiển đồ sộ (giao diện đồ họa) Hỗ trợ dịch vụ quản lý bộ nhớ và nhiều dịch vụ khác 9/26/2017 C# căn bản - LTUDQL1 4 Kiến trúc .NET Framework 9/26/2017 C# căn bản - LTUDQL1 5 Cơ chế thực thi 9/26/2017 C# căn bản - LTUDQL1 6 Kiến trúc .NET Framework 9/26/2017 C# căn bản - LTUDQL1 7 Ứng dụng .NET Framework Ứng dụng dòng lệnh (Console Application) Ứng dụng WinForm (Windows Form Application) Ứng dụng WPF (WPF Application) Ứng dụng web (ASP.NET Web Form Application) Thư viện DLL (Class Library) 9/26/2017 C# căn bản - LTUDQL1 8 Đọc thêm Kiến trúc .NET Framework: http://www.com/UploadFile/puranindia/net-framework- and-architecture/ 9/26/2017 C# căn bản - LTUDQL1 9 C# căn bản 9/26/2017 C# căn bản - LTUDQL1 10 Giới thiệu Phát triển bởi Microsoft Xuất hiện năm 2000 Phiên bản mới nhất là C# 7.0 Là ngôn ngữ lập trình cấp cao, hiện đại, hướng đối tượng và an toàn kiểu (type-safe) Có nguồn gốc từ C Cú pháp có phần quen thuộc với C, C++, Java, … Tập tin mã nguồn có đuôi mở rộng là .cs Sử dụng Visual Studio để lập trình 9/26/2017 C# căn bản - LTUDQL1 11 Hello world using System; class Hello { static void Main() { Console.cs } } 9/26/2017 C# căn bản - LTUDQL1 12 Bắt đầu với C# Biên dịch Chạy gỡ rối (Debug) và chạy không gỡ rối (Run without debug) Chế độ Release/Debug Chạy gỡ rối ▪Breakpoint ▪Step In / Step out / Step over ▪Watch / Auto watch / Local watch 9/26/2017 C# căn bản - LTUDQL1 13 Cấu trúc lập trình Chương trình (Program) Tên miền (namespace) Kiểu dữ liệu (type) Thành viên (member) Hợp ngữ (assembly) 9/26/2017 C# căn bản - LTUDQL1 14 Kiểu dữ liệu Kiểu Kiểu tham chiếu giá trị 9/26/2017 C# căn bản - LTUDQL1 15 Các kiểu dữ liệu số Signed Integral ▪sbyte: 8 bits, range from -128 to 127 ▪short: 16 bits, range from -32,768 to 32,767 ▪int : 32 bits, range from -2,147,483,648 to 2,147,483,647 ▪long : 64 bits, range from – 9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 9/26/2017 C# căn bản - LTUDQL1 16 Các kiểu dữ liệu số Unsigned integral ▪byte : 8 bits, range from 0 to 255 ▪ushort : 16 bits, range from 0 to 65,535 ▪uint : 32 bits, range from 0 to 4,294,967,295 ▪ulong : 64 bits, range from 0 to 18,446,744,073,709,551,615 9/26/2017 C# căn bản - LTUDQL1 17 Các kiểu dữ liệu số Floating point ▪float : 32 bits, range from 1.4 × 1038, 7-digit precision ▪double : 64 bits, range from 5.7 × 10308, 15-digit precision Decimal ▪decimal : 128 bits, range is at least –7.9 × 1028, with at least 28-digit precision 9/26/2017 C# căn bản - LTUDQL1 18 Biến dữ liệu int i; // Simple variable // Many variables can have the same type declaration float x, y, z; byte x = 1, y, z = 3; string name = "new name"; // Array: Indexed by an integer from Zero int x[] = {1, 2, 3}; // compile error int[] x = {1, 2, 3}; char[] y = new char[6]; // OK int x1 = x[0]; // 1 // Multi dimension array: same size in all item int [,] x = {{1, 2}, {3, 4}}; int [,] x = {{1, 2}, {3, 4, 5}}; // compile error int x2 = x[1, 0]; // 3 int [,,] x = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}}; 9/26/2017 C# căn bản - LTUDQL1 19 Ép kiểu số // Smaller type in memory size integral // type to wider one byte b = 5; // implicit int to byte int i = b; // i = 5 // Wider integral type to smaller one int i = 500; byte j = i; // compile error byte j = (byte)i; // i = 244 // No explicit conversion for floating // point number 9/26/2017 C# căn bản - LTUDQL1 20 Boxing / Unboxing Boxing: chuyển kiểu giá trị object Unboxing: trích xuất kiểu giá trị từ object 9/26/2017 C# căn bản - LTUDQL1 21 Toán tử References:. () [] new -> Arithmetic: + ++ - -- * / % sizeof Logical: & | ^ ! Conditional: && (&) || ! == != > >= < <= Type verification: is as typeof Bitwise: ~ >> << Assignment: = += -= *= /= %= &= |= ^= >>= <<= Selection: ?: ?? (not null) Lambda expression definition: => 9/26/2017 C# căn bản - LTUDQL1 22 Toán tử int i = 5; // Selection ?: string x = i == 5 ? "Yes": "No"; int? x = 5; // nullable type int y = x ?? 0; // Selection ?? operator int z = x; // Error: nullable type // cannot assign to non-nullable type // Lambda expression – anonymous method (int x) => x * 2; <=> public int Double(int x){return x * 2} 9/26/2017 C# căn bản - LTUDQL1 23 Cấu trúc điều khiển Branching ▪Selection: ?: ?? ▪ if… else if … else ▪ switch … case … default Iteration ▪ for ▪ foreach ▪ do while ▪ while Ignore & breaking ▪ continue ▪ break 9/26/2017 C# căn bản - LTUDQL1 24 Chuỗi literal // Declaration and initialization // "\" start an "escape" code string s1 = "a\n", s2 = "\"", s3 = @"a\n", s4 = s3; // assignment s2 = s1; // concatenation s3 = s1 + s3; 9/26/2017 C# căn bản - LTUDQL1 25 Escape code \a Bell (alert) \' Single quotation mark \b Backspace \" Double quotation mark \f Formfeed \\ Backslash \n New line \? Literal question mark \r Carriage return \ooo ASCII character in octal notation \t Horizontal tab \x hh ASCII character in hexadecimal notation \v Vertical tab \x hhhh Unicode in herxadeximal 9/26/2017 C# căn bản - LTUDQL1 26 Định dạng chuỗi – String format string header = String.Format( "{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n", // pattern string "City", "Year", "Population", "Change (%)"); // argument list string body = String.Format( "{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}", Name, BaseYear, BasePopulation, ObserveYear, ObservePopulation, ObservePopulation – BasePopulation)/ (double) BasePopulation); // Sample output City Year Population Year Population Change (%) ------------------------------------------------------------------ Los Angeles 1940 1,504,277 1950 1,970,358 31.9 % string s = $"{x} - {y}"; 9/26/2017 C# căn bản - LTUDQL1 27 Kết chuỗi Sử dụng “+” Sử dụng StringBuilder ▪ https://docs.com/en-us/dotnet/standard/base- types/stringbuilder Câu hỏi: nên kết bằng dấu “+” hay StringBuilder? 9/26/2017 C# căn bản - LTUDQL1 28 Tách chuỗi Phương thức String.Split 9/26/2017 C# căn bản - LTUDQL1 29 Tìm kiếm chuỗi Sử dụng phương thức String.LastIndexOf 9/26/2017 C# căn bản - LTUDQL1 30 Mảng ký tự 9/26/2017 C# căn bản - LTUDQL1 31 Bài tập chuỗi 1. Nhập vào một chuỗi, hãy thống kê số lần xuất hiện của mỗi từ trong chuỗi và in ra màn hình 2. Nhập vào Họ và tên, hãy chuẩn hóa chuỗi này và in ra màn hình.
Chuỗi được chuẩn hóa là choỗi không chứa nhiều hơn một khoảng trắng giữa các từ, không có khoảng trắng ở đầu và cuối chuỗi, ký tự đầu mỗi từ sẽ viết hoa, các ký tự còn lại được viết thường 3. Nhập vào chuỗi đường dẫn tập tin (Vd như: “C:\Documents\Photos\Test. Hãy cho biết a) Thư mục chứa tập tin, b) Tên tập tin, c) Phần mở rộng tập tin 9/26/2017 C# căn bản - LTUDQL1 32 Bài tập chuỗi 4. Viết chương trình cho phép nhập vào một chuỗi ký tự và đếm số lượng các ký tự alphabet, ký số và các ký hiệu đặc biệt khác 5.
Viết chương trình cho phép nhập vào một chuỗi ký tự và đếm số lượng nguyên âm, phụ âm 6. Viết chương trình cho phép nhập vào danh sách chuỗi ký tự và sắp xếp chuỗi ký tự theo giải thuật nổi bọt 7. Viết chương trình cho phép nhập vào 2 chuỗi (A và B) và kiểm tra chuỗi B có nằm trong chuỗi A không 8. Viết chương trình cho phép nhập vào 1 chuỗi là họ và tên, và tách phần Họ và phần Tên ra khỏi chuỗi ban đầu.
9/26/2017 C# căn bản - LTUDQL1 33 DateTime using System; … DateTime a = new DateTime(); // Construction complete with year, month, day, // hour, minute, second, millisecond DateTime b = new DateTime(2013, 06, 15, 15, 28, 31, 927); // Current time DateTime c = DateTime.Now; 9/26/2017 C# căn bản - LTUDQL1 34 Chuyển String thành DataTime string dateTime = "01/08/2008 14:50:50.42"; DateTime dt = Convert.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}", dt.Millisecond); 9/26/2017 C# căn bản - LTUDQL1 35 Chuyển String thành DataTime // Specify exactly how to interpret the string. IFormatProvider culture = new System.CultureInfo("fr-FR", true); // Alternate choice: If the string has been input by an end user, you might want to format it according to the current culture: // IFormatProvider culture = System.CurrentCultur e; DateTime dt2 = DateTime.Parse(dateTime, culture, System.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}", dt2.Millisecond 9/26/2017 C# căn bản - LTUDQL1 36 Lớp đối tượng (Class) và Cấu trúc (Struct) Đều giúp đóng gói dữ liệu (data) + hành vi (behavior) Lớp đối tượng (Class) kiểu tham chiếu Cấu trúc (Struct) kiểu giá trị Nhìn ở góc độ Lập trình hướng đối tượng ▪Class biểu diễn đối tượng phức tạp ▪Struct biểu diễn dữ liệu phức tạp 9/26/2017 C# căn bản - LTUDQL1 37 Ví dụ về Class và Struct 9/26/2017 C# căn bản - LTUDQL1 38 Thành phần của class/struct Field Event Constant Finalizer Property Indexer Method Operator Constructor Nested Type 9/26/2017 C# căn bản - LTUDQL1 39 Các tính chất của class/struct Accessbility Inheritance - Polymorphism(class) Abstract class Interface Generic Type Static Type Partial Type 9/26/2017 C# căn bản - LTUDQL1 40 Đọc thêm về Class và Struct https://docs.com/en- us/dotnet/csharp/programming-guide/classes-and- structs/ https://www.com/csharp/csharp_classes.