Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 59 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
59
Dung lượng
754,31 KB
Nội dung
LỜI MỞ ĐẦU 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 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++ Đặc biệt, 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 Trong ngôn ngữ C#, lớp kế thừa từ lớp cha, 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 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ể yêu cầu hệ điều hành nhớ so với lớp Một cấu trúc 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 http://www.ebook.edu.vn CHƯƠNG 1:MẢNG 1.1 Định Nghĩa Mảng Mảng tập hợp có thứ tự đối tựợng, tất đối tượng kiểu tập hợp xác định vị trí tập hợp mục Mảng ngôn ngữ C# có vài khác biệt với mảng ngôn ngữ C++ số ngôn ngữ khác, chúng đối tựợng Điều cho mảng sử dụng phương thức thuộc tính Mảng truy cập thuộc tính phương thức System.Array Một số phương thức lớp System.Array: Thành viên Mô tả BinarySearch() Phương thức tĩnh public tìm kiếm mảng chiều thứ tự Clear() Phương thức tĩnh public thiết lập thành phần mảng hay null Copy() Phương thức tĩnh public nạp chồng thực chép vùng mảng vào mảng khác CreateInstance() Phương thức tĩnh public nạp chồng tạo thể cho mảng IndexOf() Phương thức tĩnh public trả mục thể chứa giá trị mảng chiều LastIndexOf() Phương thức tĩnh public trả mục thể cuối giá trị mảng chiều Reverse() Phương thức tĩnh public đảo thứ tự thành phần mảng chiều Sort() Phương thức tĩnh public xếp giá trị mảng chiều http://www.ebook.edu.vn 1.2 Khai Báo Mảng Có thể khai báo mảng C# theo cú pháp sau: [] < Tên Mảng> Dấu ngoặc vuông [ ] biểu thị cho tên biến sau mảng Ví dụ khai báo biến kiểu mảng nguyên myIntArray với số phần tử ban đầu 5: myIntArray = new int[5]; 1.3 Giá Trị Mặc Định Giả sử có đoạn mã sau: /*1*/ int [] myArray; /*2*/ myArray=new int[5]; /*3*/ Button [] myButtonArray; /*4*/ myButtonArray = newButton [5]; Dòng /*1*/khai báo myArray mảng kiểu nguyên, chưa khởi tạo nên biến myArray có giá trị null Dòng /*2*/ phần tử mảng khởi tạo với giá trị mặc định Dòng /*4*/ khởi tạo biến myButtonArray, phần tử mảng không khởi tạo giá trị mặc định Thay vào chúng khởi tạo giá trị null Nếu cố truy cập đến thành phần mảng kiểu liệu tham chiếu trước chúng khởi tạo giá trị xác định, tạo ngoại lệ 1.4 Truy Cập Đến Những Phần Tử Trong Mảng Để truy cập đến phần tử mảng, ta sử dụng toán tử lấy mục[] Cũng giống ngôn ngữ C/C++, mục mảng phần tử Sử dụng thuộc tính Length cảu lớp Array ta biết kích thước mảng Như mục mảng từ đến length -1 VD sau: ta muốn lấy phần tử thứ mảng myArray, sau: Int P_T_2 = myArray[1]; 1.5 Câu Lệnh foreach foreach lệnh vòng lặp, dùng để duyệt tất phần tử mảng, tập hợp( nói lớp có cài đặt giao diện Enumerable) Chúng ta thấy cú pháp foreach đơn giản vòng lặp for: foreach( kiểu tên_biến in biến_mảng) { /* khối lệnh*/ } http://www.ebook.edu.vn Ví dụ : namespace Programming_CSharp { using System; // tạo lớp đơn giản để lưu trữ mảng public class Employee { // khởi tạo lấy tham số public Employee( int empID ) { this.empID = empID; public override string ToString() { return empID.ToString(); } // biến thành viên private private int empID; private int size; } public class Tester { static void Main() { int[] intArray; Employee[] empArray; intArray = new int[5]; empArray = new Employee[3]; // tạo đối tượng đưa vào mảng for( int i = 0; i < empArray.Length; i++) { empArray[i] = new Employee(i+5); } // xuất mảng nguyên foreach (int i in intArray) { Console.Write(i.ToString()+”\t”); http://www.ebook.edu.vn } // xuất mảng Employee foreach ( Employee e in empArray) { Console.WriteLine(e.ToString()+”\t”); } } } } Kết quả: 0 0 1.6 Sử dụng từ khóa params Từ khóa params cho phép truyền số biến tham số mà không cần thiết phải tạo mảng Trong ví dụ kế tiếp, tạo phương thức tên DisplayVals(), phương thức lấy số biến tham số nguyên: public void DisplayVals( params int[] intVals); Tuy nhiên, phương thức gọi không cần thiết phải tạo tường minh mảng, đơn giản truyền vào số nguyên, trình biên dịch kết hợp tham số vào mảng cho phương thức DisplayVals, ta gọi phương thức sau: t.DisplayVals(5,6,7,8); tự tạo mảng để truyền vào phương thức muốn: int [] explicitArray = new int[5] {1,2,3,4,5}; t.DisplayArray(explicitArray); Ví dụ 2: minh họa sử dụng params namespace Programming_CSharp { using System; public class Tester { static void Main() { http://www.ebook.edu.vn Tester t = new Tester(); t.DisplayVals(5,6,7,8); int[] explicitArray = new int[5] {1,2,3,4,5}; t.DisplayVals(explicitArray); } public void DisplayVals( params int[] intVals) { foreach (int i in intVals) { Console.WriteLine(“DisplayVals {0}”,i); } } } } Kết quả: DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals DisplayVals 1.7 Mảng Đa Chiều Mảng tổ chức phức tạp thành phần mảng khác, việc tổ chức gọi mảng đa chiều Mảng hai chiều tổ chức thành dòng cột Trong mảng ba chiều dòng mảng hai chiều Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là: Mảng đa chiều kích thước: mảng dòng mảng có kích thước với Mảng hai hay nhiều hai chiều Mảng đa chiều không kích thước: mảng dòng không kích thước với http://www.ebook.edu.vn 1.7.1 Mảng Đa Chiều Cùng Kích Thước Để khai báo mảng hai chiều, sử dụng cú pháp theo sau: [,] Ví dụ 3: Mảng hai chiều namespace Programming_CSharp { using System; public class Tester { static void Main() { int columns = 3; // khai báo mảng 4x3 số nguyên int [,] rectangularArray = new int[rows, columns]; // khởi tạo thành phần mảng for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { rectangularArray[i,j] = i+j; } } // xuất nội dung hình for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { Console.WriteLine(“rectangularArray[{0},{1}] = {2}”,i, j, rectangularArray[i, j]); } } } } } http://www.ebook.edu.vn Kết quả: rectangularArray[0,0] =0 rectangularArray[0,1] =1 rectangularArray[0,2] =2 rectangularArray[1,0] =1 rectangularArray[1,1] =2 rectangularArray[1,2] =3 rectangularArray[2,0] =2 rectangularArray[2,1] =3 rectangularArray[2,2] =4 rectangularArray[3,0] =3 rectangularArray[3,1] =4 rectangularArray[3,2] =5 Ví dụ 4:Chúng ta khởi tạo mảng đa chiều sau: namespace Programming_CSharp { using System; public class Tester { static void Main() { // khai báo biến lưu số dòng số cột mảng const int rows = 4; const int columns = // khai báo định nghĩa mảng 4x3 int[,] rectangularArray = {0,1,2}, {3,4,5}, {6,7,8},{9,10,1} ; // xụất nội dung mảng for( int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { Console.WriteLine(“rectangularArray[{0},{1}] = {2}” i, j, rectangularArray[i,j]); } http://www.ebook.edu.vn } } } } Kết quả: rectangularArray[0,0] = rectangularArray[0,1] = rectangularArray[0,2] = rectangularArray[1,0] = rectangularArray[1,1] = rectangularArray[1,2] = rectangularArray[2,0] = rectangularArray[2,1] = rectangularArray[2,2] = rectangularArray[3,0] = rectangularArray[3,1] = 10 rectangularArray[3,2] = 11 1.7.2 Mảng đa chiều có kích khác Còn gọi mảng Jagged, mảng Jagged loại mảng mảng Loại mảng thật chúng mảng chiều phần tử chúng lại có khả quản lí mảng khác nữa, mà kích thưứoc mảng thay đổi theo nhu cầu lập trình viên Ta khai báo sau: [] [] Ví dụ, khai báo mảng số nguyên hai chiều khác kích thước tên myJaggedArray sau: int [] [] myJaggedArray; 1.8.Chuyển Đổi Mảng Những mảng chuyển đổi với chiều chúng kiểu thành phần chuyển đổi Chuyển đổi tường minh mảng xảy thành phần mảng chuyển đổi tường minh Và ngược lại, chuyển đổi ngầm định mảng xảy thành phần mảng chuyển đổi ngầm định Nếu mảng chứa tham chiếu đến đối tượng tham chiếu, chuyển đổi tới mảng đối tượng sở 1.9 System.Array Lớp mảng Array chứa số phương thức hữu ích cho phép mở rộng khả mảng làm cho mảng mạnh mảng ngôn ngữ khác Hai phương thức tĩnh hữu http://www.ebook.edu.vn dụng lớp Array Sort() Reverse() Có cách hỗ trợ đầy đủ cho kiểu liệu nguyên thủy kiểu Đưa mảng làm việc với kiểu khác Button có số khó khăn Ví dụ 5: sau minh họa việc sử dụng hai phương thức để thao tác đối tượng chuỗi Sử dụng Array.Sort() Array.Reverse() namespace Programming_CSharp { using System; public class Tester { public static void PrintArray(object[] theArray) { foreach( object obj in theArray) { Console.WriteLine(“Value: {0}”, obj); } Console.WriteLine(“\n”); } static void Main() { string[] myArray = { “Who”, “is”,”Kitty”,”Mun” }; PrintArray( myArray ); Array.Reverse( myArray ); PrintArray( myArray ); string[] myOtherArray = { “Chung”, “toi”, “la”, “nhung”,”nguoi”, ”lap”,”trinh”, “may”, “tinh” }; PrintArray( myOtherArray ); Array.Sort( myOtherArray ); PrintArray( myOtherArray ); }}} http://www.ebook.edu.vn 10 { Stack intStack = new Stack(); // đưa vào ngăn xếp for (int i=0; i < 8; i++) { intStack.Push(i*5); } // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack ); // xóa phần tử Console.WriteLine(“\nPop\t{0}”, intStack.Pop()); // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack ); // xóa tiếp phần tử khác Console.WriteLine(“\nPop\t{0}”, intStack.Pop()); // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack ); // xem thành phần stack Console.WriteLine(“\nPeek \t{0}”, intStack.Peek()); // hiển thị stack Console.Write(“intStack values:\t”); PrintValues( intStack ); // khai báo mảng với 12 phần tử Array targetArray = Array.CreateInstance(typeof(int), 12); for(int i=0; i [...]... Bộ chỉ m c là một c chế cho phép c c thành phần client truy c p một tập hợp chứa bên trong một lớp bằng c ch sử dụng c pháp giống như truy c p mảng ([]) Chỉ m c là một loại thu c tính đ c biệt và bao gồm c c phương th c get() và set() để x c nhận những hành vi c a chúng Chúng ta c thể khai báo thu c tính chỉ m c bên trong c a lớp bằng c ch sử dụng c pháp như sau: this [ ... m c> ] { get; set; } Kiểu trả về đư c quyết định bởi kiểu c a đối tượng đư c trả về bởi bộ chỉ m c, trong khi đó kiểu c a đối m c đư c x c định bởi kiểu c a đối m c dùng để làm chỉ số vào trong tập hợp chứa đối tượng đích M c dù kiểu c a chỉ m c thường dùng là c c kiểu nguyên, chúng ta c ng c thể dùng chỉ m c cho tập hợp bằng c c kiểu dữ liệu kh c, như kiểu chuỗi Chúng ta c ng c thể cung c p bộ chỉ... bộ khởi dựng c thể cho phép chúng ta tạo một chuỗi bằng c ch truyền vào một mảng ký tự ho c một con trỏ ký tự 2.1.3 Thao T c Trên Chuỗi Lớp string cung c p rất nhiều số lượng c c phương th c để so sánh, tìm kiếm và thao t c trên chuỗi, c c phương th c này đư c trình bày trong bảng 1: Trong ví dụ sau đây chúng ta minh họa vi c sử dụng một số c c phương th c của chuỗi như Compare(), Concat() (và dùng... - 2.1.5 Chia Chuỗi Một giải pháp giải quyết hiệu quả hơn để minh họa cho ví dụ 2 là c thể sử dụng phương th c Split() c a lớp string Ch c năng chính là phân tích một chuỗi ra thành c c chuỗi con Để sử dụng Split(), chúng ta truyền vào một mảng c c ký tự phân c ch, c c ký tự này đư c dùng để chia c c từ trong chuỗi Và phương th c sẽ trả về một mảng những chuỗi con Ví dụ 9 : Sử dụng phương th c Split()... dẫn t c là chuỗi nằm trong dấu ngo c kép, kiểu chuỗi này c ng đư c biết như là một chuỗi hằng, khai báo như sau: string newString = “Day la chuoi hang”; Những chuỗi trích dẫn c thể đư c thêm c c ký tự escape, như là “\n” hay “\t”, ký tự này bắt đầu với dấu chéo ngư c (“\”), c c ký tự này đư c dùng để chỉ ra rằng tại vị trí đó xuống dòng hay tab đư c xuất hiện Chuỗi c ng c thể đư c tạo bằng c ch sử... vi c đ c ghi thông tin trên tập tin thì tập tin c n phải đư c đóng lại Tóm lại c c bư c c bản để làm vi c với một tậo tin là: - Bư c 1: Mở hay tạo mới tập tin - Bư c 2: Thiết lập một luồng ghi hay đ c từ tập tin - Bư c 3: Đ c hay ghi dữ liệu lên tập tin - Bư c 4: Đóng lập tin lại 3.2.1.2 C c phương th c cho vi c tạo và mở tập tin Chúng ta sẽ sử dụng những luồng kh c nhau và những phương th c kh c nhau... một luồng, c n thiết phải chỉ ra thông tin tr c tiếp sẽ đư c đi qua luồng Sau khi tạo một luồng gắn với một tập tin, thì l c này chúng ta http://www.ebook.edu.vn 26 c thể th c hiện vi c đ c ghi c c dữ liệu trên tập tin Khi th c hiện vi c đ c thông tin từ một tập tin, chúng ta c n thiết phải kiểm tra xem con trỏ tập tin đã chỉ tới cuối tập tin chưa, t c là chúng ta đã đ c đến cuối tập tin hay chưa Khi... hien dau tien cua chu CNTT trong chuoi S3 là 18 S8 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam S9 : Trung Tam Dao Tao nhan luc CNTT Thanh pho Ho Chi Minh Viet Nam - 2.1.4 Tìm một chuỗi con Trong kiểu dữ liệu String c cung c p phương th c Substring() để trích một chuỗi con từ chuỗi ban đầu C hai phiên bản đều dùng một chỉ m c để x c định vị trí... này cho phép lớp System.String chuyển đổi với những lớp kh c trong hệ thống NET Giao diện IComparable đư c th c thi bởi c c kiểu dữ liệu đã đư c sắp xếp Những lớp IComparable th c thi phương th c CompareTo() Những đối tượng ICloneable c thể tạo ra những thể hiện kh c với c ng giá trị như là thể hiện nguyên thuỷ 2.1.1 Tạo Một Chuỗi C ch phổ biến nhất để tạo ra một chuỗi là gán cho một chuỗi trích dẫn... hiểu những đ c tính c bản c a vi c thao t c trên tập tin Điều này sẽ đư c theo sau bởi một khái niệm quan trọng c a tập tin là luồng (stream) 3.1.1 Sao chép một tập tin Một lớp tập tin tồn tại bên trong lớp c sở gọi là File, lớp này đư c định vị bên trong namespace System.OI Lớp File chứa một số c c phương th c tĩnh đư c sử dụng để thao t c trên tập tin Thật vậy, tất c c c phương th c bên trong lớp ... cập thủ phủ bảng thông qua cấu trúc mảng Giả sử muốn truy cập thủ phủ bảng Massachusett, dễ dàng xác định thứ tự bảng thứ 21 theo alphabe Một cách thuận tiện lưu trữ thủ phủ theo tên bảng Một từ... kiểu liệu hashtable hay gọi bảng băm Hashtables Hashtable kiểu từ điển tối ưu cho việc truy cập nhanh Một số phương thức thuộc tính kiểu liệu Hashtable trình bày bảng http://www.ebook.edu.vn 47 Trong. .. Hashtable kiểu liệu nguyên thủy thể kiểu liệu người dùng định nghĩa (các lớp cho người lập trình tạo ra) Những đối tượng sử dụng làm khóa hashtable phải thực thi GetHashCode() Equals() Trong hầu hết