Giáo Trình Ngôn ngữ C#

461 9 0
Giáo Trình Ngôn ngữ C#

Đ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

hiện, chúng có xu hướng là chạy nhanh và nhanh hơn nữa, cũng như là những mã nguồn được biên dịch rồi thì được dùng lại Do tất cả các ngôn ngữ NET Framework cùng tạo ra sản phẩm MSIL giống nhau, nê. hiện, chúng có xu hướng chạy nhanh nhanh nữa, mã nguồn biên dịch dùng lại Do tất ngôn ngữ NET Framework tạo sản phẩm MSIL giống nhau, nên kết đối tượng tạo từ ngơn ngữ truy cập hay dẫn xuất từ đối tượng ngơn ngữ khác NET Ví dụ, người phát triển tạo lớp sở VB.NET sau dẫn xuất C# cách dễ dàng Ngôn ngữ C# Ngôn ngữ C# đơn giản, khoảng 80 từ khóa mười kiểu liệu xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao thực thi khái niệm lập trình đại C# bao gồm tất hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng Những tính chất diện ngơn ngữ lập trình đại Và ngôn ngữ C# hội đủ điều kiện vậy, xây dựng tảng hai ngôn ngữ mạnh C++ Java Ngôn ngữ C# phát triển đội ngũ kỹ sư Microsoft, người dẫn đầu Anders Hejlsberg Scott Wiltamuth Cả hai người điều người tiếng, Anders Hejlsberg biết đến tác giả Turbo Pascal, ngôn ngữ lập trình PC phổ biến Và ơng đứng đầu nhóm thiết kế Borland Delphi, thành công 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 Phần cốt lõi hay cịn gọi trái tim ngôn ngữ lập trình hướng đối tượng hỗ trợ cho việc định nghĩa làm việc với lớp Những lớp định nghĩa kiểu liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mơ hình tốt để giải vấn đề Ngơn ngữ C# chứa từ khóa cho việc khai báo kiểu lớp đối tượng phương thức hay thuộc tính lớp, cho việc thực thi đóng gói, kế thừa, đa hình, ba thuộc tính ngơn ngữ lập trình hướng đối tượng Trong ngôn ngữ C# thứ liên quan đến khai báo lớp điều tìm thấy phần khai báo Định nghĩa lớp ngơn ngữ C# khơng địi hỏi phải chia tập tin header tập tin nguồn giống ngôn ngữ C++ Hơn nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn tag XML để phát sinh tự động document cho lớp C# hỗ trợ giao diện interface, xem cam kết với lớp cho dịch vụ mà giao diện quy định Trong ngôn ngữ C#, lớp kế thừa từ lớp cha, tức không cho đa kế thừa ngôn ngữ C++, nhiên lớp thực thi nhiều giao diện Khi lớp thực thi giao diện hứa cung cấp chức thực thi giao diện 11/471 Trong ngôn ngữ C#, cấu trúc hỗ trợ, khái niệm ngữ nghĩa thay đổi khác với C++ Trong C#, cấu trúc giới hạn, kiểu liệu nhỏ gọn, tạo thể u cầu hệ điều hành nhớ so với lớp Một cấu trúc khơng thể kế thừa từ lớp hay kế thừa cấu trúc thực thi giao diện Ngôn ngữ C# cung cấp đặc tính hướng thành phần (component-oriented), thuộc tính, kiện Lập trình hướng thành phần hỗ trợ CLR cho phép lưu trữ metadata với mã nguồn cho lớp Metadata mô tả cho lớp, bao gồm phương thức thuộc tính nó, bảo mật cần thiết thuộc tính khác Mã nguồn chứa đựng logic cần thiết để thực chức Do vậy, lớp biên dịch khối self-contained, nên môi trường hosting biết cách đọc metadata lớp mã nguồn cần thiết mà khơng cần thơng tin khác để sử dụng Một lưu ý cuối ngôn ngữ C# ngôn ngữ hỗ trợ việc truy cập nhớ trực tiếp sử dụng kiểu trỏ C++ từ khóa cho dấu ngoặc [] tốn tử Các mã nguồn khơng an tồn (unsafe) Và giải phóng nhớ tự động CLR khơng thực việc giải phóng đối tượng tham chiếu sử dụng trỏ chúng giải phóng 12/471 Ngơn ngữ C# Tại phải sử dụng ngôn ngữ C# Nhiều người tin khơng cần thiết có ngơn ngữ lập trình Java, C++, Perl, Microsoft Visual Basic, ngôn ngữ khác nghĩ cung cấp tất chức cần thiết Ngôn ngữ C# ngôn ngữ dẫn xuất từ C C++, tạo từ tảng phát triển Microsoft bắt đầu với công việc C C++ thêm vào đặc tính để làm cho ngơn ngữ dễ sử dụng Nhiều số đặc tính giống với đặc tính có ngơn ngữ Java Khơng dừng lại đó, Microsoft đưa số mục đích xây dựng ngơn ngữ Những mục đích được tóm tắt sau: • • • • • • • C# ngôn ngữ đơn giản C# ngôn ngữ đại C# ngôn ngữ hướng đối tượng C# ngôn ngữ mạnh mẽ mềm dẻo C# ngôn ngữ có từ khóa C# ngơn ngữ hướng module C# trở nên phổ biến C# ngôn ngữ đơn giản C# loại bỏ vài phức tạp rối rắm ngôn ngữ Java c++, bao gồm việc loại bỏ macro, template, đa kế thừa, lớp sở ảo (virtual base class) Chúng nguyên nhân gây nhầm lẫn hay dẫn đến vấn đề cho người phát triển C++ Nếu người học ngôn ngữ chắn ta khơng trải qua thời gian để học nó! Nhưng ta khơng biết hiệu ngôn ngữ C# loại bỏ vấn đề Ngơn ngữ C# đơn giản dựa tảng C C++ Nếu thân thiện với C C++ hoậc chí Java, thấy C# giống diện mạo, cú pháp, biểu thức, toán tử chức khác lấy trực tiếp từ ngôn ngữ C C++, cải tiến để làm cho ngơn ngữ đơn giản Một vài cải tiến loại bỏ dư thừa, thêm vào cú pháp thay đổi Ví dụ như, C++ có ba tốn tử làm việc với thành viên ::, , -> Để biết dùng ba toán tử phức tạp dễ nhầm lẫn Trong C#, chúng thay với toán tử gọi (dot) Đối với người học điều việc cải tiến khác làm bớt nhầm lẫn đơn giản 13/471 Nếu sử dụng Java tin đơn giản, tìm thấy C# đơn giản Hầu hết người không tin Java ngôn ngữ đơn giản Tuy nhiên, C# dễ Java C++ C# ngơn ngữ đại Điều làm cho ngơn ngữ đại? Những đặc tính xử lý ngoại lệ, thu gom nhớ tự động, kiểu liệu mở rộng, bảo mật mã nguồn đặc tính mong đợi ngôn ngữ đại C# chứa tất đặc tính Nếu người học lập trình cảm thấy đặc tính phức tạp khó hiểu Tuy nhiên, đừng lo lắng tìm hiểu đặc tính qua chương sách Con trỏ tích hợp vào ngơn ngữ C++ Chúng nguyên nhân gây rắc rối ngôn ngữ C# loại bỏ phức tạp rắc rối phát sinh trỏ Trong C#, thu gom nhớ tự động kiểu liệu an tồn tích hợp vào ngơn ngữ,sẽ loại bỏ vấn đề rắc rối C++ C# ngôn ngữ hướng đối tượng Những đặc điểm ngơn ngữ hướng đối tượng (Object-oriented language) đóng gói (encapsulation), kế thừa (inheritance), đa hình (polymorphism) C# hỗ trợ tất đặc tính Phần hướng đối tượng C# trình bày chi tiết chương riêng phần sau C# ngôn ngữ mạnh mẽ mềm dẻo Như đề cập trước, với ngôn ngữ C# bị giới hạn thân trí tưởng tượng Ngôn ngữ không đặt ràng buộc lên việc làm C# sử dụng cho nhiều dự án khác tạo ứng dụng xử lý văn bản, ứng dụng đồ họa, tính, hay chí trình biên dịch cho ngôn ngữ khác C# ngôn ngữ từ khóa C# ngơn ngữ sử dụng giới hạn từ khóa Phần lớn từ khóa sử dụng để mô tả thông tin Chúng ta nghĩ ngơn ngữ có nhiều từ khóa mạnh Điều khơng phải thật, trường hợp ngơn ngữ C#, tìm thấy ngơn ngữ sử dụng để làm nhiệm vụ Bảng sau liệt kê từ khóa ngơn ngữ C# 14/471 Từ khóa ngơn ngữ C# abstract default foreach object sizeof unsafe as delegate goto operator stackalloc ushort base 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 catch explicit internal public 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 while throw C# ngôn ngữ hướng module Mã nguồn C# viết phần gọi lớp, lớp chứa phương thức thành viên Những lớp phương thức sử dụng lại ứng dụng hay chương trình khác Bằng cách truyền mẫu thông tin đến lớp hay phương thức tạo mã nguồn dùng lại có hiệu C# ngôn ngữ phổ biến C# ngôn ngữ lập trình Vào thời điểm sách viết, khơng biết ngơn ngữ phổ biến Nhưng ngơn ngữ có số lý để trở thành ngôn ngữ phổ biến Một lý Microsoft cam kết NET Microsoft muốn ngôn ngữ C# trở nên phổ biến Mặc dù công ty làm sản phẩm trở nên phổ biến, hỗ trợ Cách khơng lâu, Microsoft gặp thất bại hệ điều hành Microsoft Bob Mặc dù Microsoft muốn Bob trở nên phổ biến thất bại C# thay tốt để đem đến thành công sơ với Bob Thật 15/471 người công ty Microsoft sử dụng Bob công việc ngày họ Tuy nhên,với C# khác, sử dụng Microsoft Nhiều sản phẩm công ty chuyển đổi viết lại C# Bằng cách sử dụng ngôn ngữ Microsoft xác nhận khả C# cần thiết cho người lập trình Micorosoft NET lý khác để đem đến thành công C# .NET thay đổi cách tạo thực thi ứng dụng Ngoài hai lý ngôn ngữ C# trở nên phổ biến đặc tính ngơn ngữ đề cập mục trước như: đơn giản, hướng đối tượng, mạnh mẽ Ngôn ngữ C# ngôn ngữ khác Chúng ta nghe đến ngơn ngữ khác Visual Basic, C++ Java Có lẽ tự hỏi khác ngơn ngữ C# ngơn ngữ Và tự hỏi lại chọn ngôn ngữ để học mà không chọn ngôn ngữ Có nhiều lý xem số so sánh ngôn ngữ C# với ngôn ngữ khác giúp phần trả lời thắc mắc Microsoft nói C# mang đến sức mạnh ngôn ngữ C++ với dễ dàng ngơn ngữ Visual Basic Có thể khơng dễ Visual Basic, với phiên Visual Basic.NET (Version 7) ngang Bởi chúng viết lại từ tảng Chúng ta viết nhiều chương trình với mã nguồn dùng C# Mặc dù C# loại bỏ vài đặc tính C++, bù lại tránh lỗi mà thường gặp ngôn ngữ C++ Điều tiết kiệm hàng hay chí hàng ngày việc hồn tất chương trình Chúng ta hiểu nhiều điều chương giáo trình Một điều quan trọng khác với C++ mã nguồn C# khơng địi hỏi phải có tập tin header Tất mã nguồn viết khai báo lớp Như nói bên .NET runtime C# thực việc thu gom nhớ tự động Do điều nên việc sử dụng trỏ C# quan trọng C++ Những trỏ sử dụng C#, đoạn mã nguồn đánh dấu khơng an tồn (unsafe code) C# từ bỏ ý tưởng đa kế thừa C++ Và khác khác C# đưa thêm thuộc tính vào lớp giống Visual Basic Và thành viên lớp gọi tốn tử “.” khác với C++ có nhiều cách gọi tình khác 16/471 Một ngơn ngữ khác mạnh phổ biến Java, giống C++ C# phát triển dựa C Nếu định học Java sau này, tìm nhiều mà học từ C# áp dụng Điểm giống C# Java hai biên dịch mã trung gian: C# biên dịch MSIL Java biên dịch bytecode Sau chúng thực cách thông dịch biên dịch just-in-time máy ảo tương ứng Tuy nhiên, ngôn ngữ C# nhiều hỗ trợ đưa để biên dịch mã ngôn ngữ trung gian sang mã máy C# chứa nhiều kiểu liệu Java cho phép nhiều mở rộng với kiểu liệu giá trị Ngôn ngữ C# hỗ trợ kiểu liệt kệ (enumerator), kiểu giới hạn đến tập định nghĩa trước, kiểu liệu cấu trúc kiểu liệu giá trị người dùng định nghĩa Chúng ta tìm hiểu kỹ kiểu liệu tham chiếu kiểu liệu giá trị trình bày phần sau Tương tự Java, C# từ bỏ tính đa kế thừa lớp, nhiên mơ hình kế thừa đơn mở rộng tính đa kế thừa nhiều giao diện Các bước chuẩn bị cho chương trình Thơng thường, việc phát triển phần mềm, người phát triển phải tuân thủ theo quy trình phát triển phần mềm cách nghiêm ngặt quy trình chuẩn hóa Tuy nhiên phạm vi tìm hiểu ngơn ngữ viết chương trình nhỏ khơng địi hỏi khắt khe việc thực theo quy trình Nhưng để giải vấn đề cần phải thực theo bước sau Đầu tiên phải xác định vấn đề cần giải Nếu rõ vấn đề ta khơng thể tìm phương pháp giải Sau xác định vấn đề, nghĩ kế hoạch để thực Sau có kế hoạch, thực thi kế hoạch Sau kế hoạch thực thi, phải kiểm tra lại kết để xem vấn đề giải xong chưa Logic thường áp dụng nhiều lĩnh vực khác nhau, có lập trình Khi tạo chương trình C# hay ngơn ngữ nào, nên theo bước sau: • • • • Xác định mục tiêu chương trình Xác định phương pháp giải vấn đề Tạo chương trình để giải vấn đề Thực thi chương trình để xem kết 17/471 Ví dụ mục tiêu để viết chương trình xử lý văn đơn giản, mục tiêu xây dựng chương trình cho phép soạn thảo lưu trữ chuỗi ký tự hay văn Nếu khơng có mục tiêu khơng thể viết chương trình hiệu Bước thứ hai định đến phương pháp để viết chương trình Bước xác định thông tin cần thiết sử dụng chương trình, hình thức sử dụng Từ thông tin rút phương pháp để giải vấn đề Bước thứ ba bước cài đặt, bước dùng ngôn ngữ khác để cài đặt,tuy nhiên, ngôn ngữ phù hợp để giải vấn đề cách tốt chọn Trong phạm vi sách mặc định dùng C#, đơn giản tìm hiểu nó! Và bước cuối phần thực thi chương trình để xem kết Chương trình C# đơn giản Để bắt đầu cho việc tìm hiểu ngơn ngữ C# tạo tiền đề cho chương sau, chương trình bày chương trình C# đơn giản Chương trình C# -class ChaoMung { static void Main( ) { // Xuat man hinh System.Console.WriteLine("Chao Mung"); } } 18/471 -Kết quả: Chao Mung -Sau viết xong lưu dạng tập tin có phần mở rộng *.cs (C sharp) Sau biên dịch chạy chương trình Kết chuỗi “Chao Mung” xuất hình console Các mục sau giới thiệu xoay quanh ví dụ trên, cịn phần chi tiết loại trình bày chương Lớp, đối tượng kiểu liệu (type) Điều cốt lõi lập trình hướng đối tượng tạo kiểu Kiểu thứ xem trừu tượng Nó bảng liệu, tiểu trình, hay nút lệnh cửa sổ Tóm lại kiểu định nghĩa dạng vừa có thuộc tính chung (properties) hành vi ứng xử (behavior) Nếu ứng dụng Windows tạo ba nút lệnh OK, Cancel, Help, thực chất dùng ba thể kiểu nút lệnh Windows nút chia xẻ thuộc tính hành vi chung với Ví dụ, nút có thuộc tính kích thước, vị trí, nhãn tên (label), nhiên thuộc tính thể không thiết phải giống nhau, thường chúng khác nhau, nút OK có nhãn “OK”, Cancel có nhãn “Cancel” Ngồi nút có hành vi ứng xử chung khả vẽ, kích hoạt, đáp ứng thơng điệp nhấn,…Tùy theo chức đặc biệt riêng loại nội dung ứng xử khác nhau, tất chúng xem kiểu Cũng nhiều ngơn ngữ lập trình hướng đối tượng khác, kiểu C# định nghĩa lớp (class), thể riêng lớp gọi đối tượng (object) Trong chương trình bày kiểu khác ngồi kiểu lớp kiểu liệt kê, cấu trúc kiểu ủy quyền (delegates) Quay lại chương trình ChaoMung trên, chương trình có kiểu đơn giản lớp ChaoMung Để định nghĩa kiểu lớp C# phải dùng từ khố class, tiếp sau tên lớp ví dụ tên lớp ChaoMung Sau định nghĩa thuộc tính hành động cho lớp Thuộc tính hành động phải nằm dấu { } 19/471 Khai báo lớp C# khơng có dấu ; sau ngoặc } cuối lớp Và khác với lớp C/C++ chia thành phần header phần định nghĩa Trong C# , định nghĩa lớp gói gọn dấu { } sau tên lớp tập tin Phương thức Hai thành phần cấu thành lớp thuộc tính hay tính chất phương thức hay gọi hành động ứng xử đối tượng Trong C# hành vi định nghĩa phương thức thành viên lớp Phương thức hàm định nghĩa lớp Do đó, ta cịn gọi phương thức thành viên hàm thành viên lớp Các phương thức hành động mà lớp làm với cách thức làm hành động Thơng thường, tên phương thức thường đặt theo tên hành động, ví dụ DrawLine() hay GetString() Tuy nhiên ví dụ vừa trình bày, có hàm thành viên Main() hàm hàm đặc biệt, không mô tả hành động lớp hết, xác định hàm đầu vào lớp (entry point) CRL gọi thực thi Trong C#, hàm Main() viết ký tự hoa đầu, trả giá trị void hay int Khi chương trình thực thi, CLR gọi hàm Main() đầu tiên, hàm Main() đầu vào chương trình, chương trình phải có hàm Main() Đơi chương trình có nhiều hàm Main() lúc ta phải xác định dẫn biên dịch để CLR hàm Main() đầu vào chương trình Việc khai báo phương thức xem giao ước người tạo lớp người sử dụng lớp Người xây dựng lớp người dùng lớp đó, khơng hồn tồn Vì lớp xây dựng thành thư viện chuẩn cung cấp cho nhóm phát triển khác…Do việc tuân thủ theo qui tắc cần thiết Để khai báo phương thức, phải xác định kiểu giá trị trả về, tên phương thức, cuối tham số cần thiết cho phương thức thực Chú thích Một chương trình viết tốt cần phải có thích đoạn mã viết Các đoạn thích khơng biên dịch khơng tham gia vào chương trình Mục đích làm cho đoạn mã nguồn rõ ràng dễ hiểu Trong ví dụ có dịng thích : 20/471 public class Test { public static void Main() { Test t = new Test(); t.TestFunc(); } // chia hai số xử lý ngoại lệ public void TestFunc() { try { DangerousFunc1(); } catch (MyCustomException e) { Console.WriteLine(" {0}", e.Message); Console.WriteLine("Retrieving exception Exception inner =e.InnerException; history "); while ( inner != null) { Console.WriteLine("{0}", inner.Message); 457/471 inner = inner.InnerException; } } } { try { DangerousFunc2(); } MyCustomException ex = new MyCustomException("E3 - Custom Exception Situation", e); throw ex; } } public void DangerousFunc2() { try { DangerousFunc3(); } catch (System.DivideByZeroException e) { 458/471 Exception ex = new Exception("E2 - Func2 caught divide by zero", e); throw ex; } } public void DangerousFunc3() { try { DangerousFunc4(); } catch (System.ArithmeticException) { throw; } catch (System.Exception) { Console.WriteLine("Exception handled here."); } } public void DangerousFunc4() { 459/471 throw new Exception"); DivideByZeroException("E1 - DivideByZero } } } Kết quả: E3 – Custom Exception Situation! Retrieving exception history E2 - Func2 caught divide by zero E1 – DivideByZeroException Để hiểu rõ ta dùng trình debugger để chạy bước chương trình ta hiểu rõ bước thực thi việc phát sinh ngoại lệ Chương trình bắt đầu với việc gọi hàm DangerousFunc1() khối try: try { DangerousFunc1(); } DangerousFunc1() gọi DangerousFunc2(), DangerousFunc2() lại gọi DangerousFunc3(), cuối DangerousFunc3() gọi DangerousFunc4() Tất việc gọi điều nằm khối try Cuối cùng, DangerousFunc4() phát sinh ngoại lệ DivideByzeroException Ngoại lệ bình thường có chứa thơng điệp bên nó, tự dùng thông điệp Để dễ theo dõi đưa vào chuỗi xác nhận kiện diễn Ngoại lệ phát sinh DangerousFunc4() bắt khối catch hàm DangerousFunc3() Khối catch DangerousFunc3() bắt ngoại lệ Arithmetic- Exception ( DivideByZeroException), khơng thực hành động mà đơn giản phát sinh lại ngoại lệ: catch ( System.ArithmeticException) { throw; } 460/471 Cú pháp để thực phát sinh lại ngoại lệ mà khơng có bổ sung hay hiệu chỉnh : throw Do ngoại lệ phát sinh cho DangerousFunc2(), khối catch DangerousFunc2() thực vài hành động tiếp tục phát sinh ngoại lệ có kiểu Trong hàm khởi dựng ngoại lệ mới, DangerousFunc2() truyền chuỗi thông điệp (“E2 - Func2 caught divide by zero”) ngoại lệ ban đầu Do ngoại lệ ban đầu (E1) trở thành ngoại lệ bên ngoại lệ (E2) Sau hàm DangerousFunc2() phát sinh ngoại lệ (E2) cho hàm DangerousFunc1() DangerousFunc1() bắt giữ ngoại lệ này, làm số công việc tạo ngoại lệ có kiểu MyCustomException, truyền vào hàm khởi dựng ngoại lệ chuỗi (“E3 – Custom Exception Situation!”) ngoại lệ bắt giữ (E2) Chúng ta nên nhớ ngoại lệ bắt giữ ngoại lệ có chứa ngoại lệ DivideByZeroException (E1) bên Tại thời điểm này, có ngoại lệ kiểu MyCustomException (E3), ngoại lệ chứa bên ngoại lệ kiểu Exception (E2), đến lượt chứa ngoại lệ kiểu DivideByZeroException (E1) bên Sau ngoại lệ phát sinh cho hàm TestFunc; Khi khối catch TestFunc thực in thông điệp ngoại lệ : E3 – Custom Exception Situation! sau ngoại lệ bên lấy thơng qua vịng lặp while: while ( inner != null) { Console.WriteLine("{0}", inner.Message); inner = inner.InnerException; } Kết chuỗi ngoại lệ phát sinh bắt giữ: Retrieving exception history E2 - Func2 caught divide by zero E1 – DivideByZero Exception Câu hỏi câu trả lời Câu hỏi trả lời Việc sử dụng catch khơng có tham số có nhiều sức mạnh chúng bắt tất ngoại lệ Tại khơng ln ln sử dụng câu lệnh catch khơng có tham số để bắt lỗi? Mặc dù sử dụng catch có nhiều sức mạnh, làm nhiều thông tin quan trọng ngoại lệ phát sinh Khi khơng biết xác 461/471 loại ngoại lệ xảy khó bảo trì khắc phục ngoại lệ sau Về phía người dùng Nếu chương trình gặp ngoại lệ mà khơng có thơng báo rõ ràng cho nguời dùng làm cho họ hoang mang, đổ lỗi cho chương trình khơng tốt lỗi khơng phải ta Ví dụ lỗi hết tài nguyên nhớ người dùng sử dụng q nhiều chương trình hoạt động lúc Tóm lại nên sử dụng catch với tham số chi tiết để thực tốt việc quản lý ngoại lệ phát sinh Có phải tất ngoại lệ đối xử cách bình đẳng? Khơng phải, có hai loại ngoại lệ, ngoại lệ hệ thống ngoại lệ chương trình ứng dụng Ngoại lệ chương trình ứng dụng khơng kết thúc chương trình Cịn ngoại lệ hệ thống kết thúc chương trình Nói chung ngoại lệ xuất trước Hiện người ta chia nhiều mức độ ngoại lệ tùy theo mức độ ngoại lệ mà chương trình nhận ứng xử khác Để biết thêm chi tiết đọc thêm tài liệu NET Framework xử lý ngoại lệ Như câu trả lời bên phải tìm hiểu nhiều ngoại lệ cách thức xử lý ngoại lệ chúng phát sinh? Việc xây dựng chương trình ứng dụng phức tạp, chương trình ln tiếm ẩn yếu tố khơng ổn định phát sinh ngoại lệ dẫn đến lỗi không mong muốn Việc thực bắt giữ ngoại lệ cần thiết chương trình, cho phép xây dựng chương trình hồn thiện xử lý thơng điệp ngoại lệ tốt Tìm hiểu ngoại lệ đem đến cho nhiều kinh nghiệm việc xây dựng chương trình phức tạp Câu hỏi thêm Hãy cho biết từ khóa sử dụng để xử lý ngoại lệ? Phân biệt lỗi ngoại lệ? Khi thực việc bắt giữ ngoại lệ Nếu có nhiều mức bắt giữ ngoại lệ thực mức Từ chi tiết đến tổng quát, hay từ tổng quát đến chi tiết? Ý nghĩa từ khóa finally việc xử lý ngoại lệ? Câu lệnh dùng để phát sinh ngoại lệ? Loại sau nên xử lý theo ngoại lệ loại nên xử lý mã lệnh thơng thường? a Giá trị nhập vào người dùng không nằm mức cho phép 462/471 b Tập tin không viết mà thực viết c Đối mục truyền vào cho phương thức chứa giá trị không hợp lệ d Đối mục truyền vào cho phương thức chứa kiểu không hợp lệ Câuhỏi 7: Nguyên nhân dẫn đến phát sinh ngoại lệ? Khi ngoại lệ xuất hiện? a Trong tạo mã nguồn b Trong biên dịch c Trong thực thi chương trình d Khi yêu cầu đựơc đưa ta người dùng cuối Khi khối lệnh finally thực hiện? Trong namespace chức lớp liên quan đến việc xử lý ngoại lệ? Hãy cho biết số lớp xử lý ngoại lệ quan trọng namespace này? Bài tập Hãy viết đoạn lệnh để thực việc bắt ngoại lệ liên quan đến câu lệnh sau đây: Ketqua = Sothu1 / Sothu2; Chương trình sau có vấn đề Hãy xác định vấn đề phát sinh ngoại lệ chạy chương trình Và viết lại chương trình hồn chỉnh gồm lệnh xử lý ngoại lệ: using System; public class Tester { public static void Main() { uint so1=0; 463/471 int so2, so3; so2 = -10; so3 = 0; // tính giá trị lại so1 -= 5; so2 = 5/so3; // xuất kết Console.WriteLine("So 1: {0}, So 2:{1}", so1, so2); } } Chương trình sau dẫn đến ngoại lệ hay khơng? Nếu có cho biết ngoại lệ phát sinh Hãy viết lại chương trình hồn chỉnh có xử lý ngoại lệ cách đưa thông điệp ngoại lệ phát sinh using System; using System.IO; public class Tester { public static void Main() { string fname = "test3.txt"; string buffer; 464/471 StreamReader sReader = File.OpenText(fname); while ( (buffer = sReader.ReadLine()) !=null) { Console.WriteLine(buffer); } } } Hãy xem lại ví dụ chương trước, ví dụ phái sinh ngoại lệ thêm đoạn xử lý ngoại lệ cho ví dụ 465/471 Tham gia đóng góp Tài liệu: Giáo trình ngơn ngữ lập trình C# Biên tập bởi: Khuyet Danh URL: http://voer.edu.vn/c/cf37fa1e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Microsoft.Net Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f5170fd Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Ngôn ngữ C# Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/383e2f05 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Kiểu liệu Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c628c03d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Biến Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e4d222a7 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Biểu thức khoảng trắng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/53c9b9c8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Câu lệnh (statement) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ef49d812 466/471 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Toán tử Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/64265b82 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Namespace dẫn biên dịch Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8bf8d397 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Định nghĩa lớp Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f1362ede Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Tạo đối tượng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c80193ec Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Sử dụng thành viên tĩnh (static member) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c41b00ec Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Truyền tham số Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/3624d9fb Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Nạp chồng phương thức Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/bd255949 Giấy phép: http://creativecommons.org/licenses/by/3.0/ 467/471 Module: Kế thừa - đa hình Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/07a02f22 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Nạp chồng toán tử Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f2df06a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cấu trúc Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/39c764b9 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực thi giao diện Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ae28c389 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Truy cập phương thức giao diện Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/bb4cf9d8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Mảng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/95046681 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Bộ mục Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/facb36c6 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Giao diện tập hợp 468/471 Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/1c80935d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách mảng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/84b9090b Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Hàng đợi (Queue) ngăn xếp (Stack) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f5fba35e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Kiểu từ điển Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f6b8756 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp đối tượng String Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/df61063f Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Các biểu thức quy tắc (Regular Expression) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/5803541c Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cơ chế ủy quyền Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e64dce7a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cơ chế kiện Các tác giả: Khuyet Danh 469/471 URL: http://www.voer.edu.vn/m/ae896c9e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp đối tượng NET Framework Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ff3ed6f8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp thao tác tập tin Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f5ac1e86 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Làm việc với tập tin liệu Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e82666c2 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Phát sinh bắt giữ ngoại lệ Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/9b77c54d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Những đối tượng ngoại lệ Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/40f1e7a2 Giấy phép: http://creativecommons.org/licenses/by/3.0/ 470/471 Chương trình Thư viện Học liệu Mở Việt Nam Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources – VOER) hỗ trợ Quỹ Việt Nam Mục tiêu chương trình xây dựng kho Tài nguyên giáo dục Mở miễn phí người Việt cho người Việt, có nội dung phong phú Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0 nội dung sử dụng, tái sử dụng truy nhập miễn phí trước hết trong môi trường giảng dạy, học tập nghiên cứu sau cho tồn xã hội Với hỗ trợ Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) trở thành cổng thơng tin cho sinh viên giảng viên ngồi Việt Nam Mỗi ngày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, học tập tải tài liệu giảng dạy Với hàng chục nghìn module kiến thức từ hàng nghìn tác giả khác đóng góp, Thư Viện Học liệu Mở Việt Nam kho tàng tài liệu khổng lồ, nội dung phong phú phục vụ cho tất nhu cầu học tập, nghiên cứu độc giả Nguồn tài liệu mở phong phú có VOER có chia sẻ tự nguyện tác giả ngồi nước Q trình chia sẻ tài liệu VOER trở lên dễ dàng đếm 1, 2, nhờ vào sức mạnh tảng Hanoi Spring Hanoi Spring tảng công nghệ tiên tiến thiết kế cho phép công chúng dễ dàng chia sẻ tài liệu giảng dạy, học tập chủ động phát triển chương trình giảng dạy dựa khái niệm học liệu mở (OCW) tài nguyên giáo dục mở (OER) Khái niệm chia sẻ tri thức có tính cách mạng khởi xướng phát triển tiên phong Đại học MIT Đại học Rice Hoa Kỳ vòng thập kỷ qua Kể từ đó, phong trào Tài nguyên Giáo dục Mở phát triển nhanh chóng, UNESCO hỗ trợ chấp nhận chương trình thức nhiều nước giới 471/471 ... d

hiện, chúng có xu hướng chạy nhanh nhanh nữa, mã nguồn biên dịch dùng lại Do tất ngôn ngữ NET Framework tạo sản phẩm MSIL giống nhau, nên kết đối tượng tạo từ ngơn ngữ truy cập hay dẫn xuất từ đối tượng ngơn ngữ khác NET Ví dụ, người phát triển tạo lớp sở VB.NET sau dẫn xuất C# cách dễ dàng Ngôn ngữ C# Ngôn ngữ C# đơn giản, khoảng 80 từ khóa mười kiểu liệu xây dựng sẵn Tuy nhiên, ngôn ngữ C# có ý nghĩa cao thực thi khái niệm lập trình đại C# bao gồm tất hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng Những tính chất diện ngơn ngữ lập trình đại Và ngôn ngữ C# hội đủ điều kiện vậy, xây dựng tảng hai ngôn ngữ mạnh C++ Java Ngôn ngữ C# phát triển đội ngũ kỹ sư Microsoft, người dẫn đầu Anders Hejlsberg Scott Wiltamuth Cả hai người điều người tiếng, Anders Hejlsberg biết đến tác giả Turbo Pascal, ngôn ngữ lập trình PC phổ biến Và ơng đứng đầu nhóm thiết kế Borland Delphi, thành công 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 Phần cốt lõi hay cịn gọi trái tim ngôn ngữ lập trình hướng đối tượng hỗ trợ cho việc định nghĩa làm việc với lớp Những lớp định nghĩa kiểu liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mơ hình tốt để giải vấn đề Ngơn ngữ C# chứa từ khóa cho việc khai báo kiểu lớp đối tượng phương thức hay thuộc tính lớp, cho việc thực thi đóng gói, kế thừa, đa hình, ba thuộc tính ngơn ngữ lập trình hướng đối tượng Trong ngôn ngữ C# thứ liên quan đến khai báo lớp điều tìm thấy phần khai báo Định nghĩa lớp ngơn ngữ C# khơng địi hỏi phải chia tập tin header tập tin nguồn giống ngôn ngữ C++ Hơn nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn tag XML để phát sinh tự động document cho lớp C# hỗ trợ giao diện interface, xem cam kết với lớp cho dịch vụ mà giao diện quy định Trong ngôn ngữ C#, lớp kế thừa từ lớp cha, tức không cho đa kế thừa ngôn ngữ C++, nhiên lớp thực thi nhiều giao diện Khi lớp thực thi giao diện hứa cung cấp chức thực thi giao diện 11/471 Trong ngôn ngữ C#, cấu trúc hỗ trợ, khái niệm ngữ nghĩa thay đổi khác với C++ Trong C#, cấu trúc giới hạn, kiểu liệu nhỏ gọn, tạo thể u cầu hệ điều hành nhớ so với lớp Một cấu trúc khơng thể kế thừa từ lớp hay kế thừa cấu trúc thực thi giao diện Ngôn ngữ C# cung cấp đặc tính hướng thành phần (component-oriented), thuộc tính, kiện Lập trình hướng thành phần hỗ trợ CLR cho phép lưu trữ metadata với mã nguồn cho lớp Metadata mô tả cho lớp, bao gồm phương thức thuộc tính nó, bảo mật cần thiết thuộc tính khác Mã nguồn chứa đựng logic cần thiết để thực chức Do vậy, lớp biên dịch khối self-contained, nên môi trường hosting biết cách đọc metadata lớp mã nguồn cần thiết mà khơng cần thơng tin khác để sử dụng Một lưu ý cuối ngôn ngữ C# ngôn ngữ hỗ trợ việc truy cập nhớ trực tiếp sử dụng kiểu trỏ C++ từ khóa cho dấu ngoặc [] tốn tử Các mã nguồn khơng an tồn (unsafe) Và giải phóng nhớ tự động CLR khơng thực việc giải phóng đối tượng tham chiếu sử dụng trỏ chúng giải phóng 12/471 Ngơn ngữ C# Tại phải sử dụng ngôn ngữ C# Nhiều người tin khơng cần thiết có ngơn ngữ lập trình Java, C++, Perl, Microsoft Visual Basic, ngôn ngữ khác nghĩ cung cấp tất chức cần thiết Ngôn ngữ C# ngôn ngữ dẫn xuất từ C C++, tạo từ tảng phát triển Microsoft bắt đầu với công việc C C++ thêm vào đặc tính để làm cho ngơn ngữ dễ sử dụng Nhiều số đặc tính giống với đặc tính có ngơn ngữ Java Khơng dừng lại đó, Microsoft đưa số mục đích xây dựng ngơn ngữ Những mục đích được tóm tắt sau: • • • • • • • C# ngôn ngữ đơn giản C# ngôn ngữ đại C# ngôn ngữ hướng đối tượng C# ngôn ngữ mạnh mẽ mềm dẻo C# ngôn ngữ có từ khóa C# ngơn ngữ hướng module C# trở nên phổ biến C# ngôn ngữ đơn giản C# loại bỏ vài phức tạp rối rắm ngôn ngữ Java c++, bao gồm việc loại bỏ macro, template, đa kế thừa, lớp sở ảo (virtual base class) Chúng nguyên nhân gây nhầm lẫn hay dẫn đến vấn đề cho người phát triển C++ Nếu người học ngôn ngữ chắn ta khơng trải qua thời gian để học nó! Nhưng ta khơng biết hiệu ngôn ngữ C# loại bỏ vấn đề Ngơn ngữ C# đơn giản dựa tảng C C++ Nếu thân thiện với C C++ hoậc chí Java, thấy C# giống diện mạo, cú pháp, biểu thức, toán tử chức khác lấy trực tiếp từ ngôn ngữ C C++, cải tiến để làm cho ngơn ngữ đơn giản Một vài cải tiến loại bỏ dư thừa, thêm vào cú pháp thay đổi Ví dụ như, C++ có ba tốn tử làm việc với thành viên ::, , -> Để biết dùng ba toán tử phức tạp dễ nhầm lẫn Trong C#, chúng thay với toán tử gọi (dot) Đối với người học điều việc cải tiến khác làm bớt nhầm lẫn đơn giản 13/471 Nếu sử dụng Java tin đơn giản, tìm thấy C# đơn giản Hầu hết người không tin Java ngôn ngữ đơn giản Tuy nhiên, C# dễ Java C++ C# ngơn ngữ đại Điều làm cho ngơn ngữ đại? Những đặc tính xử lý ngoại lệ, thu gom nhớ tự động, kiểu liệu mở rộng, bảo mật mã nguồn đặc tính mong đợi ngôn ngữ đại C# chứa tất đặc tính Nếu người học lập trình cảm thấy đặc tính phức tạp khó hiểu Tuy nhiên, đừng lo lắng tìm hiểu đặc tính qua chương sách Con trỏ tích hợp vào ngơn ngữ C++ Chúng nguyên nhân gây rắc rối ngôn ngữ C# loại bỏ phức tạp rắc rối phát sinh trỏ Trong C#, thu gom nhớ tự động kiểu liệu an tồn tích hợp vào ngơn ngữ,sẽ loại bỏ vấn đề rắc rối C++ C# ngôn ngữ hướng đối tượng Những đặc điểm ngơn ngữ hướng đối tượng (Object-oriented language) đóng gói (encapsulation), kế thừa (inheritance), đa hình (polymorphism) C# hỗ trợ tất đặc tính Phần hướng đối tượng C# trình bày chi tiết chương riêng phần sau C# ngôn ngữ mạnh mẽ mềm dẻo Như đề cập trước, với ngôn ngữ C# bị giới hạn thân trí tưởng tượng Ngôn ngữ không đặt ràng buộc lên việc làm C# sử dụng cho nhiều dự án khác tạo ứng dụng xử lý văn bản, ứng dụng đồ họa, tính, hay chí trình biên dịch cho ngôn ngữ khác C# ngôn ngữ từ khóa C# ngơn ngữ sử dụng giới hạn từ khóa Phần lớn từ khóa sử dụng để mô tả thông tin Chúng ta nghĩ ngơn ngữ có nhiều từ khóa mạnh Điều khơng phải thật, trường hợp ngơn ngữ C#, tìm thấy ngơn ngữ sử dụng để làm nhiệm vụ Bảng sau liệt kê từ khóa ngơn ngữ C# 14/471 Từ khóa ngơn ngữ C# abstract default foreach object sizeof unsafe as delegate goto operator stackalloc ushort base 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 catch explicit internal public 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 while throw C# ngôn ngữ hướng module Mã nguồn C# viết phần gọi lớp, lớp chứa phương thức thành viên Những lớp phương thức sử dụng lại ứng dụng hay chương trình khác Bằng cách truyền mẫu thông tin đến lớp hay phương thức tạo mã nguồn dùng lại có hiệu C# ngôn ngữ phổ biến C# ngôn ngữ lập trình Vào thời điểm sách viết, khơng biết ngơn ngữ phổ biến Nhưng ngơn ngữ có số lý để trở thành ngôn ngữ phổ biến Một lý Microsoft cam kết NET Microsoft muốn ngôn ngữ C# trở nên phổ biến Mặc dù công ty làm sản phẩm trở nên phổ biến, hỗ trợ Cách khơng lâu, Microsoft gặp thất bại hệ điều hành Microsoft Bob Mặc dù Microsoft muốn Bob trở nên phổ biến thất bại C# thay tốt để đem đến thành công sơ với Bob Thật 15/471 người công ty Microsoft sử dụng Bob công việc ngày họ Tuy nhên,với C# khác, sử dụng Microsoft Nhiều sản phẩm công ty chuyển đổi viết lại C# Bằng cách sử dụng ngôn ngữ Microsoft xác nhận khả C# cần thiết cho người lập trình Micorosoft NET lý khác để đem đến thành công C# .NET thay đổi cách tạo thực thi ứng dụng Ngoài hai lý ngôn ngữ C# trở nên phổ biến đặc tính ngơn ngữ đề cập mục trước như: đơn giản, hướng đối tượng, mạnh mẽ Ngôn ngữ C# ngôn ngữ khác Chúng ta nghe đến ngơn ngữ khác Visual Basic, C++ Java Có lẽ tự hỏi khác ngơn ngữ C# ngơn ngữ Và tự hỏi lại chọn ngôn ngữ để học mà không chọn ngôn ngữ Có nhiều lý xem số so sánh ngôn ngữ C# với ngôn ngữ khác giúp phần trả lời thắc mắc Microsoft nói C# mang đến sức mạnh ngôn ngữ C++ với dễ dàng ngơn ngữ Visual Basic Có thể khơng dễ Visual Basic, với phiên Visual Basic.NET (Version 7) ngang Bởi chúng viết lại từ tảng Chúng ta viết nhiều chương trình với mã nguồn dùng C# Mặc dù C# loại bỏ vài đặc tính C++, bù lại tránh lỗi mà thường gặp ngôn ngữ C++ Điều tiết kiệm hàng hay chí hàng ngày việc hồn tất chương trình Chúng ta hiểu nhiều điều chương giáo trình Một điều quan trọng khác với C++ mã nguồn C# khơng địi hỏi phải có tập tin header Tất mã nguồn viết khai báo lớp Như nói bên .NET runtime C# thực việc thu gom nhớ tự động Do điều nên việc sử dụng trỏ C# quan trọng C++ Những trỏ sử dụng C#, đoạn mã nguồn đánh dấu khơng an tồn (unsafe code) C# từ bỏ ý tưởng đa kế thừa C++ Và khác khác C# đưa thêm thuộc tính vào lớp giống Visual Basic Và thành viên lớp gọi tốn tử “.” khác với C++ có nhiều cách gọi tình khác 16/471 Một ngơn ngữ khác mạnh phổ biến Java, giống C++ C# phát triển dựa C Nếu định học Java sau này, tìm nhiều mà học từ C# áp dụng Điểm giống C# Java hai biên dịch mã trung gian: C# biên dịch MSIL Java biên dịch bytecode Sau chúng thực cách thông dịch biên dịch just-in-time máy ảo tương ứng Tuy nhiên, ngôn ngữ C# nhiều hỗ trợ đưa để biên dịch mã ngôn ngữ trung gian sang mã máy C# chứa nhiều kiểu liệu Java cho phép nhiều mở rộng với kiểu liệu giá trị Ngôn ngữ C# hỗ trợ kiểu liệt kệ (enumerator), kiểu giới hạn đến tập định nghĩa trước, kiểu liệu cấu trúc kiểu liệu giá trị người dùng định nghĩa Chúng ta tìm hiểu kỹ kiểu liệu tham chiếu kiểu liệu giá trị trình bày phần sau Tương tự Java, C# từ bỏ tính đa kế thừa lớp, nhiên mơ hình kế thừa đơn mở rộng tính đa kế thừa nhiều giao diện Các bước chuẩn bị cho chương trình Thơng thường, việc phát triển phần mềm, người phát triển phải tuân thủ theo quy trình phát triển phần mềm cách nghiêm ngặt quy trình chuẩn hóa Tuy nhiên phạm vi tìm hiểu ngơn ngữ viết chương trình nhỏ khơng địi hỏi khắt khe việc thực theo quy trình Nhưng để giải vấn đề cần phải thực theo bước sau Đầu tiên phải xác định vấn đề cần giải Nếu rõ vấn đề ta khơng thể tìm phương pháp giải Sau xác định vấn đề, nghĩ kế hoạch để thực Sau có kế hoạch, thực thi kế hoạch Sau kế hoạch thực thi, phải kiểm tra lại kết để xem vấn đề giải xong chưa Logic thường áp dụng nhiều lĩnh vực khác nhau, có lập trình Khi tạo chương trình C# hay ngơn ngữ nào, nên theo bước sau: • • • • Xác định mục tiêu chương trình Xác định phương pháp giải vấn đề Tạo chương trình để giải vấn đề Thực thi chương trình để xem kết 17/471 Ví dụ mục tiêu để viết chương trình xử lý văn đơn giản, mục tiêu xây dựng chương trình cho phép soạn thảo lưu trữ chuỗi ký tự hay văn Nếu khơng có mục tiêu khơng thể viết chương trình hiệu Bước thứ hai định đến phương pháp để viết chương trình Bước xác định thông tin cần thiết sử dụng chương trình, hình thức sử dụng Từ thông tin rút phương pháp để giải vấn đề Bước thứ ba bước cài đặt, bước dùng ngôn ngữ khác để cài đặt,tuy nhiên, ngôn ngữ phù hợp để giải vấn đề cách tốt chọn Trong phạm vi sách mặc định dùng C#, đơn giản tìm hiểu nó! Và bước cuối phần thực thi chương trình để xem kết Chương trình C# đơn giản Để bắt đầu cho việc tìm hiểu ngơn ngữ C# tạo tiền đề cho chương sau, chương trình bày chương trình C# đơn giản Chương trình C# -class ChaoMung { static void Main( ) { // Xuat man hinh System.Console.WriteLine("Chao Mung"); } } 18/471 -Kết quả: Chao Mung -Sau viết xong lưu dạng tập tin có phần mở rộng *.cs (C sharp) Sau biên dịch chạy chương trình Kết chuỗi “Chao Mung” xuất hình console Các mục sau giới thiệu xoay quanh ví dụ trên, cịn phần chi tiết loại trình bày chương Lớp, đối tượng kiểu liệu (type) Điều cốt lõi lập trình hướng đối tượng tạo kiểu Kiểu thứ xem trừu tượng Nó bảng liệu, tiểu trình, hay nút lệnh cửa sổ Tóm lại kiểu định nghĩa dạng vừa có thuộc tính chung (properties) hành vi ứng xử (behavior) Nếu ứng dụng Windows tạo ba nút lệnh OK, Cancel, Help, thực chất dùng ba thể kiểu nút lệnh Windows nút chia xẻ thuộc tính hành vi chung với Ví dụ, nút có thuộc tính kích thước, vị trí, nhãn tên (label), nhiên thuộc tính thể không thiết phải giống nhau, thường chúng khác nhau, nút OK có nhãn “OK”, Cancel có nhãn “Cancel” Ngồi nút có hành vi ứng xử chung khả vẽ, kích hoạt, đáp ứng thơng điệp nhấn,…Tùy theo chức đặc biệt riêng loại nội dung ứng xử khác nhau, tất chúng xem kiểu Cũng nhiều ngơn ngữ lập trình hướng đối tượng khác, kiểu C# định nghĩa lớp (class), thể riêng lớp gọi đối tượng (object) Trong chương trình bày kiểu khác ngồi kiểu lớp kiểu liệt kê, cấu trúc kiểu ủy quyền (delegates) Quay lại chương trình ChaoMung trên, chương trình có kiểu đơn giản lớp ChaoMung Để định nghĩa kiểu lớp C# phải dùng từ khố class, tiếp sau tên lớp ví dụ tên lớp ChaoMung Sau định nghĩa thuộc tính hành động cho lớp Thuộc tính hành động phải nằm dấu { } 19/471 Khai báo lớp C# khơng có dấu ; sau ngoặc } cuối lớp Và khác với lớp C/C++ chia thành phần header phần định nghĩa Trong C# , định nghĩa lớp gói gọn dấu { } sau tên lớp tập tin Phương thức Hai thành phần cấu thành lớp thuộc tính hay tính chất phương thức hay gọi hành động ứng xử đối tượng Trong C# hành vi định nghĩa phương thức thành viên lớp Phương thức hàm định nghĩa lớp Do đó, ta cịn gọi phương thức thành viên hàm thành viên lớp Các phương thức hành động mà lớp làm với cách thức làm hành động Thơng thường, tên phương thức thường đặt theo tên hành động, ví dụ DrawLine() hay GetString() Tuy nhiên ví dụ vừa trình bày, có hàm thành viên Main() hàm hàm đặc biệt, không mô tả hành động lớp hết, xác định hàm đầu vào lớp (entry point) CRL gọi thực thi Trong C#, hàm Main() viết ký tự hoa đầu, trả giá trị void hay int Khi chương trình thực thi, CLR gọi hàm Main() đầu tiên, hàm Main() đầu vào chương trình, chương trình phải có hàm Main() Đơi chương trình có nhiều hàm Main() lúc ta phải xác định dẫn biên dịch để CLR hàm Main() đầu vào chương trình Việc khai báo phương thức xem giao ước người tạo lớp người sử dụng lớp Người xây dựng lớp người dùng lớp đó, khơng hồn tồn Vì lớp xây dựng thành thư viện chuẩn cung cấp cho nhóm phát triển khác…Do việc tuân thủ theo qui tắc cần thiết Để khai báo phương thức, phải xác định kiểu giá trị trả về, tên phương thức, cuối tham số cần thiết cho phương thức thực Chú thích Một chương trình viết tốt cần phải có thích đoạn mã viết Các đoạn thích khơng biên dịch khơng tham gia vào chương trình Mục đích làm cho đoạn mã nguồn rõ ràng dễ hiểu Trong ví dụ có dịng thích : 20/471 public class Test { public static void Main() { Test t = new Test(); t.TestFunc(); } // chia hai số xử lý ngoại lệ public void TestFunc() { try { DangerousFunc1(); } catch (MyCustomException e) { Console.WriteLine("\n{0}", e.Message); Console.WriteLine("Retrieving exception Exception inner =e.InnerException; history "); while ( inner != null) { Console.WriteLine("{0}", inner.Message); 457/471 inner = inner.InnerException; } } } { try { DangerousFunc2(); } MyCustomException ex = new MyCustomException("E3 - Custom Exception Situation", e); throw ex; } } public void DangerousFunc2() { try { DangerousFunc3(); } catch (System.DivideByZeroException e) { 458/471 Exception ex = new Exception("E2 - Func2 caught divide by zero", e); throw ex; } } public void DangerousFunc3() { try { DangerousFunc4(); } catch (System.ArithmeticException) { throw; } catch (System.Exception) { Console.WriteLine("Exception handled here."); } } public void DangerousFunc4() { 459/471 throw new Exception"); DivideByZeroException("E1 - DivideByZero } } } Kết quả: E3 – Custom Exception Situation! Retrieving exception history E2 - Func2 caught divide by zero E1 – DivideByZeroException Để hiểu rõ ta dùng trình debugger để chạy bước chương trình ta hiểu rõ bước thực thi việc phát sinh ngoại lệ Chương trình bắt đầu với việc gọi hàm DangerousFunc1() khối try: try { DangerousFunc1(); } DangerousFunc1() gọi DangerousFunc2(), DangerousFunc2() lại gọi DangerousFunc3(), cuối DangerousFunc3() gọi DangerousFunc4() Tất việc gọi điều nằm khối try Cuối cùng, DangerousFunc4() phát sinh ngoại lệ DivideByzeroException Ngoại lệ bình thường có chứa thơng điệp bên nó, tự dùng thông điệp Để dễ theo dõi đưa vào chuỗi xác nhận kiện diễn Ngoại lệ phát sinh DangerousFunc4() bắt khối catch hàm DangerousFunc3() Khối catch DangerousFunc3() bắt ngoại lệ Arithmetic- Exception ( DivideByZeroException), khơng thực hành động mà đơn giản phát sinh lại ngoại lệ: catch ( System.ArithmeticException) { throw; } 460/471 Cú pháp để thực phát sinh lại ngoại lệ mà khơng có bổ sung hay hiệu chỉnh : throw Do ngoại lệ phát sinh cho DangerousFunc2(), khối catch DangerousFunc2() thực vài hành động tiếp tục phát sinh ngoại lệ có kiểu Trong hàm khởi dựng ngoại lệ mới, DangerousFunc2() truyền chuỗi thông điệp (“E2 - Func2 caught divide by zero”) ngoại lệ ban đầu Do ngoại lệ ban đầu (E1) trở thành ngoại lệ bên ngoại lệ (E2) Sau hàm DangerousFunc2() phát sinh ngoại lệ (E2) cho hàm DangerousFunc1() DangerousFunc1() bắt giữ ngoại lệ này, làm số công việc tạo ngoại lệ có kiểu MyCustomException, truyền vào hàm khởi dựng ngoại lệ chuỗi (“E3 – Custom Exception Situation!”) ngoại lệ bắt giữ (E2) Chúng ta nên nhớ ngoại lệ bắt giữ ngoại lệ có chứa ngoại lệ DivideByZeroException (E1) bên Tại thời điểm này, có ngoại lệ kiểu MyCustomException (E3), ngoại lệ chứa bên ngoại lệ kiểu Exception (E2), đến lượt chứa ngoại lệ kiểu DivideByZeroException (E1) bên Sau ngoại lệ phát sinh cho hàm TestFunc; Khi khối catch TestFunc thực in thông điệp ngoại lệ : E3 – Custom Exception Situation! sau ngoại lệ bên lấy thơng qua vịng lặp while: while ( inner != null) { Console.WriteLine("{0}", inner.Message); inner = inner.InnerException; } Kết chuỗi ngoại lệ phát sinh bắt giữ: Retrieving exception history E2 - Func2 caught divide by zero E1 – DivideByZero Exception Câu hỏi câu trả lời Câu hỏi trả lời Việc sử dụng catch khơng có tham số có nhiều sức mạnh chúng bắt tất ngoại lệ Tại khơng ln ln sử dụng câu lệnh catch khơng có tham số để bắt lỗi? Mặc dù sử dụng catch có nhiều sức mạnh, làm nhiều thông tin quan trọng ngoại lệ phát sinh Khi khơng biết xác 461/471 loại ngoại lệ xảy khó bảo trì khắc phục ngoại lệ sau Về phía người dùng Nếu chương trình gặp ngoại lệ mà khơng có thơng báo rõ ràng cho nguời dùng làm cho họ hoang mang, đổ lỗi cho chương trình khơng tốt lỗi khơng phải ta Ví dụ lỗi hết tài nguyên nhớ người dùng sử dụng q nhiều chương trình hoạt động lúc Tóm lại nên sử dụng catch với tham số chi tiết để thực tốt việc quản lý ngoại lệ phát sinh Có phải tất ngoại lệ đối xử cách bình đẳng? Khơng phải, có hai loại ngoại lệ, ngoại lệ hệ thống ngoại lệ chương trình ứng dụng Ngoại lệ chương trình ứng dụng khơng kết thúc chương trình Cịn ngoại lệ hệ thống kết thúc chương trình Nói chung ngoại lệ xuất trước Hiện người ta chia nhiều mức độ ngoại lệ tùy theo mức độ ngoại lệ mà chương trình nhận ứng xử khác Để biết thêm chi tiết đọc thêm tài liệu NET Framework xử lý ngoại lệ Như câu trả lời bên phải tìm hiểu nhiều ngoại lệ cách thức xử lý ngoại lệ chúng phát sinh? Việc xây dựng chương trình ứng dụng phức tạp, chương trình ln tiếm ẩn yếu tố khơng ổn định phát sinh ngoại lệ dẫn đến lỗi không mong muốn Việc thực bắt giữ ngoại lệ cần thiết chương trình, cho phép xây dựng chương trình hồn thiện xử lý thơng điệp ngoại lệ tốt Tìm hiểu ngoại lệ đem đến cho nhiều kinh nghiệm việc xây dựng chương trình phức tạp Câu hỏi thêm Hãy cho biết từ khóa sử dụng để xử lý ngoại lệ? Phân biệt lỗi ngoại lệ? Khi thực việc bắt giữ ngoại lệ Nếu có nhiều mức bắt giữ ngoại lệ thực mức Từ chi tiết đến tổng quát, hay từ tổng quát đến chi tiết? Ý nghĩa từ khóa finally việc xử lý ngoại lệ? Câu lệnh dùng để phát sinh ngoại lệ? Loại sau nên xử lý theo ngoại lệ loại nên xử lý mã lệnh thơng thường? a Giá trị nhập vào người dùng không nằm mức cho phép 462/471 b Tập tin không viết mà thực viết c Đối mục truyền vào cho phương thức chứa giá trị không hợp lệ d Đối mục truyền vào cho phương thức chứa kiểu không hợp lệ Câuhỏi 7: Nguyên nhân dẫn đến phát sinh ngoại lệ? Khi ngoại lệ xuất hiện? a Trong tạo mã nguồn b Trong biên dịch c Trong thực thi chương trình d Khi yêu cầu đựơc đưa ta người dùng cuối Khi khối lệnh finally thực hiện? Trong namespace chức lớp liên quan đến việc xử lý ngoại lệ? Hãy cho biết số lớp xử lý ngoại lệ quan trọng namespace này? Bài tập Hãy viết đoạn lệnh để thực việc bắt ngoại lệ liên quan đến câu lệnh sau đây: Ketqua = Sothu1 / Sothu2; Chương trình sau có vấn đề Hãy xác định vấn đề phát sinh ngoại lệ chạy chương trình Và viết lại chương trình hồn chỉnh gồm lệnh xử lý ngoại lệ: using System; public class Tester { public static void Main() { uint so1=0; 463/471 int so2, so3; so2 = -10; so3 = 0; // tính giá trị lại so1 -= 5; so2 = 5/so3; // xuất kết Console.WriteLine("So 1: {0}, So 2:{1}", so1, so2); } } Chương trình sau dẫn đến ngoại lệ hay khơng? Nếu có cho biết ngoại lệ phát sinh Hãy viết lại chương trình hồn chỉnh có xử lý ngoại lệ cách đưa thông điệp ngoại lệ phát sinh using System; using System.IO; public class Tester { public static void Main() { string fname = "test3.txt"; string buffer; 464/471 StreamReader sReader = File.OpenText(fname); while ( (buffer = sReader.ReadLine()) !=null) { Console.WriteLine(buffer); } } } Hãy xem lại ví dụ chương trước, ví dụ phái sinh ngoại lệ thêm đoạn xử lý ngoại lệ cho ví dụ 465/471 Tham gia đóng góp Tài liệu: Giáo trình ngơn ngữ lập trình C# Biên tập bởi: Khuyet Danh URL: http://voer.edu.vn/c/cf37fa1e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Microsoft.Net Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f5170fd Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Ngôn ngữ C# Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/383e2f05 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Kiểu liệu Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c628c03d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Biến Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e4d222a7 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Biểu thức khoảng trắng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/53c9b9c8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Câu lệnh (statement) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ef49d812 466/471 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Toán tử Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/64265b82 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Namespace dẫn biên dịch Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8bf8d397 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Định nghĩa lớp Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f1362ede Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Tạo đối tượng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c80193ec Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Sử dụng thành viên tĩnh (static member) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/c41b00ec Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Truyền tham số Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/3624d9fb Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Nạp chồng phương thức Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/bd255949 Giấy phép: http://creativecommons.org/licenses/by/3.0/ 467/471 Module: Kế thừa - đa hình Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/07a02f22 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Nạp chồng toán tử Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f2df06a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cấu trúc Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/39c764b9 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Thực thi giao diện Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ae28c389 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Truy cập phương thức giao diện Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/bb4cf9d8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Mảng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/95046681 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Bộ mục Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/facb36c6 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Giao diện tập hợp 468/471 Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/1c80935d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Danh sách mảng Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/84b9090b Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Hàng đợi (Queue) ngăn xếp (Stack) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f5fba35e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Kiểu từ điển Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/8f6b8756 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp đối tượng String Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/df61063f Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Các biểu thức quy tắc (Regular Expression) Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/5803541c Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cơ chế ủy quyền Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e64dce7a Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Cơ chế kiện Các tác giả: Khuyet Danh 469/471 URL: http://www.voer.edu.vn/m/ae896c9e Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp đối tượng NET Framework Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/ff3ed6f8 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Lớp thao tác tập tin Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/f5ac1e86 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Làm việc với tập tin liệu Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/e82666c2 Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Phát sinh bắt giữ ngoại lệ Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/9b77c54d Giấy phép: http://creativecommons.org/licenses/by/3.0/ Module: Những đối tượng ngoại lệ Các tác giả: Khuyet Danh URL: http://www.voer.edu.vn/m/40f1e7a2 Giấy phép: http://creativecommons.org/licenses/by/3.0/ 470/471 Chương trình Thư viện Học liệu Mở Việt Nam Chương trình Thư viện Học liệu Mở Việt Nam (Vietnam Open Educational Resources – VOER) hỗ trợ Quỹ Việt Nam Mục tiêu chương trình xây dựng kho Tài nguyên giáo dục Mở miễn phí người Việt cho người Việt, có nội dung phong phú Các nội dung đểu tuân thủ Giấy phép Creative Commons Attribution (CC-by) 4.0 nội dung sử dụng, tái sử dụng truy nhập miễn phí trước hết trong môi trường giảng dạy, học tập nghiên cứu sau cho tồn xã hội Với hỗ trợ Quỹ Việt Nam, Thư viện Học liệu Mở Việt Nam (VOER) trở thành cổng thơng tin cho sinh viên giảng viên ngồi Việt Nam Mỗi ngày có hàng chục nghìn lượt truy cập VOER (www.voer.edu.vn) để nghiên cứu, học tập tải tài liệu giảng dạy Với hàng chục nghìn module kiến thức từ hàng nghìn tác giả khác đóng góp, Thư Viện Học liệu Mở Việt Nam kho tàng tài liệu khổng lồ, nội dung phong phú phục vụ cho tất nhu cầu học tập, nghiên cứu độc giả Nguồn tài liệu mở phong phú có VOER có chia sẻ tự nguyện tác giả ngồi nước Q trình chia sẻ tài liệu VOER trở lên dễ dàng đếm 1, 2, nhờ vào sức mạnh tảng Hanoi Spring Hanoi Spring tảng công nghệ tiên tiến thiết kế cho phép công chúng dễ dàng chia sẻ tài liệu giảng dạy, học tập chủ động phát triển chương trình giảng dạy dựa khái niệm học liệu mở (OCW) tài nguyên giáo dục mở (OER) Khái niệm chia sẻ tri thức có tính cách mạng khởi xướng phát triển tiên phong Đại học MIT Đại học Rice Hoa Kỳ vòng thập kỷ qua Kể từ đó, phong trào Tài nguyên Giáo dục Mở phát triển nhanh chóng, UNESCO hỗ trợ chấp nhận chương trình thức nhiều nước giới 471/471 ... d? ?ng ngôn ng? ?? C# Nhiều ng? ?ời tin kh? ?ng c? ??n thiết c? ? ng? ?n ng? ?? lập trình Java, C+ +, Perl, Microsoft Visual Basic, ng? ?n ng? ?? kh? ?c nghĩ cung c? ??p tất ch? ?c cần thiết Ng? ?n ng? ?? C# ng? ?n ng? ?? dẫn xuất từ C. .. hư? ?ng đối tư? ?ng, mạnh mẽ Ng? ?n ng? ?? C# ng? ?n ng? ?? kh? ?c Ch? ?ng ta nghe đến ng? ?n ng? ?? kh? ?c Visual Basic, C+ + Java C? ? lẽ tự hỏi kh? ?c ng? ?n ng? ?? C# ng? ?n ng? ?? Và tự hỏi lại chọn ng? ?n ng? ?? để h? ?c mà kh? ?ng chọn... m? ?c đích xây d? ?ng ngơn ng? ?? Nh? ?ng m? ?c đích đư? ?c tóm tắt sau: • • • • • • • C# ng? ?n ng? ?? đơn giản C# ng? ?n ng? ?? đại C# ng? ?n ng? ?? hư? ?ng đối tư? ?ng C# ng? ?n ng? ?? mạnh mẽ mềm dẻo C# ng? ?n ng? ?? c? ? từ khóa C#

Ngày đăng: 13/12/2022, 19:27

Tài liệu cùng người dùng

Tài liệu liên quan