Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 40 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
40
Dung lượng
110,35 KB
Nội dung
Lập trìnhhướngđốitượngtrong C# (Object Oriented Programming in C#) Lớp và đốitượng Class & Object Giới thiệu về class Xây dựng các kiểu dữ liệu mới là đặc tính quan trọng của ngôn ngữ lập trìnhhướngđốitượng Có thể tạo kiểu dữ liệu mới trongC# bằng cách định nghĩa lớp (class). Mỗi thể hiện của lớp được gọi là đốitượng (object) Lớp là 1 kiểu dữ liệu chung của một nhóm đốitượng nào đó. Ví dụ: loài mèo, loài chó Tạo class Ví dụ: public class Cat { // Trường (field) public string _name; public double _weight; // Phương thức (method) public void Sound() { Console.WriteLine(“Mew mew”); } } Tương tự như struct, định nghĩa class trongC# cũng hoàn toàn tương tự Tạo đốitượng với từ khóa new Sau khi định nghĩa lớp Cat, chúng ta có thể khai báo đốitượng với kiểu Cat Cat cat1, cat2; Khi chưa gán giá trị cho đối tượng, nó sẽ mang giá trị null. Để tạo mới 1 đối tượng, ta dùng từ khóa new: cat1 = new Cat(); Có thể gán đốitượng này bằng đốitượng khác. Bản chất phép gán này là gán tham chiếu của đốitượng này bằng tham chiếu của đốitượng kia, khi 1 đốitượng thay đổi (không thay đổi tham chiếu), đốitượng kia cũng thay đổi theo cat1 = cat2; Hàm khởi tạo (Constructor) Hàm khởi tạo mặc định: Mỗi class trongC# được cung cấp sẵn 1 hàm khởi tạo mặc định, khi ta tạo 1 hàm khởi tạo, hàm mặc định này sẽ biến mất Trong ví dụ trên, lớp Cat được cung cấp sẵn hàm khởi tạo Cat(), nếu ta khai báo 1 hàm khởi tạo thì hàm Cat() sẽ mất VD: public class Cat { public Cat(string name) { _name = name; } } Hàm khởi tạo (Constructor) Khi đó, ta không thể khởi tạo đốitượng bằng hàm Cat() được nữa mà phải dung hàm Cat(string name) // Lệnh đúng Cat cat1 = new Cat(“Tom”); // Lệnh có lỗi Cat cat2 = new Cat(); Ta có thể ghi đè lên hàm khởi tạo mặc định, mục đích để đưa các dữ liệu về mặc định public Cat() { _name = “Mew”; _weight = 1; } Từ khóa this Từ khóa this dùng để truy cập thể hiện hiện tại của class, thường dùng để phân biệt tên thành viên và tên tham số khi có sự trùng nhau public class Person { public string name; public Person(string name) { this.name = name; } } Móc nối các hàm khởi tạo bằng từ khóa this public class Cat { public Cat(string name, double weight) { _name = name; _weight = weight; } public Cat(string name) : this(name, 1) { } public Cat(double weight) : this(“Mew”, weight) { } } Chúng ta có thể tạo ra 1 hàm khởi tạo tổng quát rồi gọi nó trong các hàm khởi tạo khác Tùy chọn tham số public class Cat { public Cat(string name = “Mew”, double weight = 1) { _name = name; _weight = weight; } } // Khi tạo đốitượng Cat cat1 = new Cat(); // name = “Mew”, weight = 1 Cat cat2 = new Cat(“Tom”); // name = “Tom”, weight = 1 Cat cat3 = new Cat(weight: 2); // name = “Mew”, weight = 2 Tương tự như hàm, hàm khởi tạo cũng có các chức năng: giá trị tham số mặc định, truyền giá trị theo tên tham số [...]... tĩnh Ba trụ cột của hướng đốitượng • Tính đóng gói • Tính kế thừa • Tính đa hình Tính đóng gói Encapsulation C# hỗ trợ 5 loại bổ từ truy xuất Bổ từ truy xuất public Phạm vi không giới hạn private Các bổ từ truy xuất trongC# Giới hạn truy cập Chỉ được sử dụng trong class khai báo nó protected Chỉ được sử dụng trong class khai báo nó và các class dẫn xuất internal Chỉ được sử dụng trong các class cùng... get; set; } public int Level { get; set; } } C# sẽ tự tạo 1 trường private giống như trường name bên trên Với class Pokemon đã tạo ở trên, ta có thể tạo 1 đốitượng Pokemon Pokemon mewtwo = new Pokemon(); mewtwo.Name = “Mewtwo”; mewtwo.ID = 150; Cú pháp khởi tạo đốitượng mewtwo.Level = 100; Ta có thể viết gọn đoạn code trên theo cú pháp khởi tạo đốitượng Pokemon mewtwo = new Pokemon() { Name =... các class cùng khối assembly với class khai báo nó protected internal Chỉ được sử dụng trong class khai báo nó và các class dẫn xuất thuộc cùng khối assembly Mặc định với class là internal Mặc định với các thành viên bên trong class là private Trong C++ class Humans{ Đóng gói với phương pháp truyền thống TrongC# public class Humans string name; { public: private string name; void setName(string);... hay dùng là để đếm số đốitượng đã được tạo } } Trong 1 lớp, ta có thể tạo đối đa 1 hàm khởi tạo tĩnh, hàm này không có tham số và được thực hiện duy nhất 1 lần trước mọi hàm khởi tạo khác, thường dùng để tạo giá trị cho các trường dữ liệu tĩnh public class TaiKhoan { public static int soLuongTK; Hàm khởi tạo tĩnh & lớp tĩnh public static TaiKhoan() { soLuongTK = 0; } } Chú ý: Trong các hàm tĩnh,... Humans::setName(string s){ Giống như C++ và Java, ta có thể đóng gói dữ liệu trongC# bằng cách sử dụng bổ từ private cho dữ liệu rồi viết các phương thức setter và getter } name = s; public string getName() } { string Humans::getName(void){ return name; return name; } } } Thay vì phải viết 2 hàm getter và setter riêng biệt như trên, C# cho phép sử dụng “thuộc tính” (property) để tương tác giống như tương... sealed class sẽ dẫn đến lỗi Cơ bản về kế thừa // Error class MyString : String { } Trong lớp con, ta có thể gọi hàm khởi tạo của lớp cha bằng cách sử dụng từ khóa base Cách dùng tương tự từ khóa this Mặc định khi không dùng base thì sẽ gọi hàm khởi tạo mặc định không tham số public class Humans Kiểm soát sự khởi tạo đối tượng của lớp cha bằng từ khóa base { public string Name { get; set; } public int... string School { get; set; } Kiểm soát sự khởi tạo đối tượng của lớp cha bằng từ khóa base public int Grade { get; set; } public Student() {} public Student(string name, int age, string school, int grade) : base(name, age) { School = school; Grade = grade; } } Ngoài ra, ta cũng có thể gọi phương thức của lớp cha bằng từ khóa base Khác với C++, giống Java, C# chỉ hỗ trợ kế thừa đơn, việc kế thừa từ nhiều... (hoặc set) cho thuộc tính thì thuộc tính đó sẽ là thuộc tính chỉ đọc (hoặc chỉ ghi) Ngoài ra, C# còn cho phép sử dụng các bổ từ trước các phương thức get, set để giới hạn truy cập đến thuộc tính Thuộc tính tĩnh Cách sử dụng giống như trường tĩnh Các hàm get, set cũng chỉ được gọi các thành viên tĩnh trong class public class Car { public string name; public string Name { get { return name; } Mở... Trong class, ta có thể định nghĩa các thành viên tĩnh Để gọi 1 thành viên tĩnh, ta phải gọi thông qua tên lớp chứ không gọi qua thể hiện của lớp đó // Gọi đúng Từ khóa static Console.WriteLine(“Hello World”);... number public readonly int max; Trường hằng public static readonly int min; public Number() { max = 100; } public static Number() { min = 0; } Từ khóa partial dùng để tách 1 class thành nhiều phần chứa trong các file code khác nhau // class1.cs public partial class Humans { Từ khóa partial public string Name { get; set; } public int Age { get; set; } } // class2.cs public partial class Humans { public . Lập trình hướng đối tượng trong C# (Object Oriented Programming in C#) Lớp và đối tượng Class & Object Giới thiệu về class. của ngôn ngữ lập trình hướng đối tượng Có thể tạo kiểu dữ liệu mới trong C# bằng cách định nghĩa lớp (class). Mỗi thể hiện của lớp được gọi là đối tượng