1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu lập trình C tiếng Việt lesson 11 CSharp introduction

102 618 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 102
Dung lượng 1,18 MB

Nội dung

Lập trình hướng đối tượng Bài 13: Giới thiệu C# Nội dung • • • • • Giới thiệu NET C# Lập trình cấu trúc với C# Quản lý ngoại lệ Lập trình hướng đối tượng C# Giá trị tham chiếu .Net Platform • Là tảng lập trình tảng thực thi ứng dụng • thành phần là: – Common Language Runtime – Base Class Library Ngôn ngữ C# • Đơn giản – Loại bỏ phức tạp có Java hay C++ macro, template, đa kế thừa, virtual base class – Giống diện mạo cú pháp C C++ cải tiến đơn giản (Ví dụ : “:: , , ->” “.” • Hiện đại – Có đầy đủ tính năng: Xử lý ngoại lệ, thu gom nhớ tự động, kiểu liệu an toàn, bảo mật mã nguồn… • Hướng đối tượng – Đóng gói (encapsulation) – Kế thừa (inheritance) – Đa hình (polymorphism) Thí dụ Một số lưu ý • Trong C# thứ nằm lớp – Không C C++ • • • • Mọi chương trình C# phải có hàm Main C# phân biệt chữ hoa, chữ thường Chương trình thực gọi assembly MSIL – – – – Microsoft Intermediate Language, mã máy “Mã quản lý” Chạy CLR Dịch vào mã máy cần (JIT Compiler) Dạng liệu int 32 bit integer long 64 bit integer float 32 bit floating point double 64 bit floating point char thể Unicode 16 bits string dạng gán so sánh decimal 28 significant digits bool dạng giá trị true false Thí dụ String Input_Line; double length; Console.Write ("Enter length: "); Input_Line = Console.ReadLine (); length = double.Parse(Input_Line); Các thay đổi so với C • Phải gán giá trị cho biến trước sử dụng • Lệnh if đòi hỏi biểu thức giá trị bool biến kiểu bool class Program { static void Main(string[] args) { bool allOK; allOK = true; if (allOK) { System.Console.WriteLine("All OK!"); } } } class Program { static void Main(string[] args) { int a = 1; int b = 2; if (a == b) { System.Console.WriteLine("Something is wrong!"); } else { System.Console.WriteLine("All OK!"); } } } Lỗi: class Program { static void Main(string[] args) { int a = 1; int b = 2; if (a = b) { System.Console.WriteLine("Something is wrong!"); } else { System.Console.WriteLine("All OK!"); } } } 10 Stack Heap  Stack sử dụng cho tham số biến địa phương phương thức   Như C Khi lời gọi tạo, tham số biến địa phương lần gọi bổ sung stack  Cũng trả địa  Do gọi “ngăn xếp”  Khi phương thức kết thúc hay phát ngoại lệ, biến địa phương tham số lấy khỏi stack 88  Bộ nhớ cho đối tượng tạo với từ khóa new cung cấp Heap  Giống malloc C new C++  Khi phương thức mà tạo đối tượng hoàn thành, không gian không tự động thu hồi Đối tượng truy cập  Không C C++ ta không cần phải giải phóng nhớ cung cấp Heap  Chúng giải phóng cách tử động thu hồi nhớ (Garbage Collector) thời điểm sau tất tham chiếu tới chúng giải phóng 89 Lưu ý  Heap vô hạn  Garbage collection giải phóng nhớ sử dụng đối tượng mà không tham chiếu trỏ tới  Nếu ta tạo nhiều đối tượng mà có tham chiếu, ta nhận ngoại lệ OutOfMemoryException 90 Thí dụ class Circle { private string name; private double radius = 0; private Circle My_Model; // A “Copy” constructor public Circle (Circle Model) { radius = Model.Radius(); // Copy the model’s data name = Model.Name(); My_Model = Model; // Keep a reference to the model } } 91 class Program { static void Main(string[] args) { Circle c1, c2; int count = 0; c1 = new Circle("Circle A", 5); while (true) { c2 = new Circle(c1); c1 = c2; count++; if (count % 1000000 == 0) { Console.WriteLine("count = " + count); } } } } 92 Ngoại lệ OutOfMemory Tạo nhiều 70,000,000 đối tượng Circle trước phát ngoại lệ OutOfMemor Có thể phải đợi vài phút! Catch không bắt ngoại lệ OutOfMemory 93 System.Object  Trong C# tất lớp dẫn xuất từ lớp System.Object  Chúng ta xem xét lớp dẫn xuất sau  Tương tự lớp dẫn xuất C++  Đối tượng lớp có thành viên lớp System.Object  C# cung cấp bí danh “object”   Đồng tới “System.Object” Lưu ý viết chữ thường 94  Tham chiếu tới đối tượng Circle c1; c1 = new Circle("Circle_42", 42); object o; o = c1; 95 Chuyển kiểu Circle c1; c1 = new Circle(42); object o; o = c1; Circle c2; c2 = (Circle) o; object o; o = c1; Circle c2; c2 = (Circle) o; Nếu o không Circle, chương trình phát ngoại lệ 96 Boxing  Lưu biến nguyên đối tượng    int i = 42; object o = i; o tham chiếu   Phải tham chiếu tới vị trí heap Biến i giá trị stack 97 Boxing Lệnh object o = i; cung cấp nhớ heap cho biến nguyên copy giá trị i vào vùng nhớ Điều gọi boxing o tham chiếu tới copy i Thay đổi không ảnh hưởng lẫn 98 Unboxing int j = o; // Doesn’t work Phải chuyển kiểu o int j = (int) o; // This does work Điều xảy o không tham chiếu tới biến nguyên? 99 Chuyển kiểu an toàn  Toán tử is if (my_variable is sometype) { // Cast my_variable as sometype } 100 static void Main(string[] args) { int i = 42; object o = i; if (o is int) { int j = (int)o; Console.WriteLine("j is " + j); } else { Console.WriteLine("j is not an int"); } Console.ReadLine(); } 101 Toán tử as • Nhận giá trị null không chuyển kiểu • Chỉ áp dụng với dạng tham chiếu dạng nullable static void Main(string[] args) { int i = 42; object o = i; int? j = o as int?; if (j == null) { Console.WriteLine("j = null"); } else { Console.WriteLine("j = " + j); } Console.ReadLine(); } 102 [...]... Khối check static void Main(string[] args) { checked { try { int lhs = Int32.Parse(Console.ReadLine()); int rhs = Int32.Parse(Console.ReadLine()); int ans = lhs + rhs; Console.WriteLine(ans.ToString()); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } Console.ReadLine(); // Hold window open } } 26 Lựa chọn trình dịch check Click here 27 Click OK Tất c số h c số nguyên c a project... reader.Close(); } } 33 Lập trình hướng đối tượng với C# 34 Thí dụ lớp Circle class Circle { double radius = 0.0; public double Area() { return 3.141592 * radius * radius; } } Đóng gói • • Biến thành phần đư c gọi là trường (field) Hàm thành phần đư c gọi là phương th c (method) Interface đối ngư c với Implementation 35 Tạo đối tượng  Định nghĩa lớp không cung c p bộ nhớ cho c c trường dữ liệu c a nó... suit.spades: color = "Black"; break; } System.Console.WriteLine(color); } 12 Lỗi: static void Main(string[ ] args) { string color = ""; suit trumps = suit.clubs; switch (trumps) { case suit.hearts: case suit.diamonds: color = "Red"; break; case suit.clubs: case suit.spades: color = "Black"; // No break! } System.Console.WriteLine(color); } 13 Lỗi: static void Main(string[ ] args) { string color = "";... = suit.clubs; switch (trumps) { case suit.hearts: color = "Red"; // No break! case suit.diamonds: color = "Red"; break; case suit.clubs: case suit.spades: color = "Black"; break; } System.Console.WriteLine(color); } 14 Sử dụng ngoại lệ  Quản lý ngoại lệ đối với c c vấn đề không mong muốn    Không sử dụng với c c luồng điều khiển thông thường    Dữ liệu tồi Điều kiện không thể Kết th c vòng lặp... here 18 19 C thể c nhiều catch try { int lhs = Int32.Parse(Console.ReadLine()); int rhs = Int32.Parse(Console.ReadLine()); int ans = lhs / rhs; Console.WriteLine(ans.ToString()); } catch (System.FormatException ex) { Console.WriteLine("Please enter a integer value."); } catch (System.DivideByZeroException ex) { Console.WriteLine("Please enter a nonzero value for divisor."); } 20 check và uncheck tràn...Lỗi: class Program { static void Main(string[] args) { int a = 0; if (a) { System.Console.WriteLine("Something is wrong!"); } else { System.Console.WriteLine("All OK!"); } } } 11 Mọi case trong lệnh switch phải c break static void Main(string[ ] args) { string color = ""; suit trumps = suit.clubs; switch (trumps) { case suit.hearts: case suit.diamonds: color = "Red"; break; case suit.clubs: case suit.spades:... M c định số h c số nguyên không đư c kiểm tra Tràn số nguyên không phát ra ngoại lệ  Kiểm tra tràn số nguyên c thể th c hiện    Với toàn dự án Với c c khối code riêng biệt Với c c biểu th c riêng biệt 21 static void Main(string[] args) { try { int lhs = Int32.Parse(Console.ReadLine()); int rhs = Int32.Parse(Console.ReadLine()); int ans = lhs + rhs; Console.WriteLine(ans.ToString()); } catch (Exception... public static string monthName(int Month) { switch (Month) { case 1 : return "January"; case 2 : return "February"; // case 12 : return "December"; Lớp đư c x c định trong không gian tên System default : throw new ArgumentOutOfRangeException("Bad Month"); } } Tạo đối tượng c a lớp ArgumentOutOfRangeException với thông báo “Bad Month” 31 Khối finally  Thỉnh thoảng c n đoạn mã để cleanup thậm chí nếu c ... project sẽ đư c check 28 static void Main(string[] args) { try { int lhs = Int32.Parse(Console.ReadLine()); int rhs = Int32.Parse(Console.ReadLine()); int ans = lhs + rhs; Console.WriteLine(ans.ToString()); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } Console.ReadLine(); // Hold window open } 29 30 Phát ra ngoại lệ C ch phát ra ngoại lệ để thông báo lỗi tới chương trình gọi Example:... (Exception ex) { Console.WriteLine("Error: " + ex.Message); } Console.ReadLine(); // Hold window open } 22 23 Sử dụng check static void Main(string[] args) { try { int lhs = Int32.Parse(Console.ReadLine()); int rhs = Int32.Parse(Console.ReadLine()); int ans = checked(lhs + rhs); Console.WriteLine(ans.ToString()); } catch (Exception ex) { Console.WriteLine("Error: " + ex.Message); } Console.ReadLine(); ... args) { Circle c; c = new Circle(); } 36 Call function Area() of Circle object c1 Area of Circle c1 37 Thiết lập Sử dụng phương th c thiết lập để thiết đặt giá trị khởi tạo cho trường liệu Phương... thiết lập cho lớp Circle class Circle { private double radius; public Circle (double r) { radius = r; } } Phương th c thiết lập không trả giá trị 39 Calls constructor 40 Area of Circle c1 41... " + Circle_A.Name() ); Console.WriteLine (" created with radius " + Circle_A.Radius()); Console.WriteLine ("Its area is " + Circle_A.Area()); Circle c2 = Create_Circle(); Console.Write ("Circle

Ngày đăng: 28/03/2016, 01:09