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

Tính năng nâng cao trong C#

18 322 3
Tài liệu đã được kiểm tra trùng lặp

Đ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 18
Dung lượng 63,26 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

C# Language Features Các tính năng nâng cao của C#... Không có indexer  Giả sử ta có 1 đối tượng danh sách lớp, trong đối tượng có chứa danh sách các sinh viên trong 1 lớp  Nếu muốn tr

Trang 1

C# Language Features Các tính năng nâng cao của C#

Trang 2

Chỉ số

Trang 3

Không có

indexer

 Giả sử ta có 1 đối tượng danh sách lớp, trong đối tượng có chứa danh sách các sinh viên trong 1 lớp

 Nếu muốn truy cập đến từng sinh viên trong danh sách, ta phải viết 1 hàm trả về 1 sinh viên và 1 hàm thay đổi giá trị của sinh viên đó

class DanhSachLop {

List < SinhVien > danhsach;

public SinhVien GetSinhVien( int index) {

return danhsach[index];

} public void SetSinhVien( int index, SinhVien sv) {

danhsach[index] = sv;

}

}

Trang 4

 C# cung cấp tính năng indexer giúp đơn giản hóa việc truy cập đến 1 sinh viên trong danh sách lớp nói trên Việc truy cập này tương tự với việc truy cập đến các kí tự trong 1 xâu

class DanhSachLop

{ List<SinhVien> danhsach;

public SinhVien this[int index]

{ get { return danhsach[index]; } set { danhsach[index] = value; } }

}

Trang 5

static void Main() {

DanhSachLop a = new DanhSachLop(); int i = 0;

// Lệnh xử lí

Console.WriteLine(a[i].Name);

//

}

Trang 6

 Ngoài kiểu tham số là int, ta có thể khai báo tham số có kiểu tùy ý,

số lượng tùy ý

class DanhSachLop

{ List<SinhVien> danhsach;

public SinhVien this[string name]

{ get { } set { } }

}

Trang 7

Operator Overloading

Quá tải toán tử

Trang 8

Quá tải toán

tử

C# cho phép ta quá tải các toán tử:

 Các toán tử 1 ngôi: !, ++, …

 Các toán tử 2 ngôi: +, -, *, /, %, ^, &, |, >>, <<

 Các toán tử logic: >, <, >=, <=, ==, !=

Các toán tử +=, -=, *=,… không được phép quá tải, nó sẽ lấy giá trị quá tải của các phép toán tương ứng

Cú pháp:

public static <kiểu trả về> operator <phép toán>(danh sách số hạng) VD: public static PhanSo operator +(PhanSo a, PhanSo b)

Trang 9

Ví dụ

class PhanSo

{ int tu, mau;

public static PhanSo operator *( PhanSo a, PhanSo b) {

return new PhanSo (a.tu * b.tu, a.mau * b.mau); }

public void InPhanSo() {

Console WriteLine("{0}/{1}", tu, mau);

} public PhanSo ( int tu, int mau) {

this tu = tu;

this mau = mau;

} }

Trang 10

Ví dụ

static void Main(string[] args) {

PhanSo a = new PhanSo(1, 2); PhanSo b = new PhanSo(3, 4); PhanSo c = a * b;

c.InPhanSo();

} Kết quả 3/8

Trang 11

Chú ý

 Khi quá tải các toán tử so sánh, ta phải quá tải các toán tử ngược với nó: < và >, >= và <=, == và !=

 Khi quá tải toán tử ==, ta nên ghi đè các phương thức Equals và GetHashCode kế thừa từ lớp object

public static bool operator ==(PhanSo a, PhanSo b) {

return (a.tu == b.tu) && (a.mau == b.mau);

}

public static bool operator !=(PhanSo a, PhanSo b) {

return (a.tu != b.tu) || (a.mau != b.mau);

}

Trang 12

Type conversions

Chuyển đổi kiểu dữ liệu

Trang 13

Chuyển đổi

kiểu dữ liệu

 C# cung cấp cho ta tính năng định nghĩa việc chuyển đổi kiểu dữ liệu này sang kiểu dữ liệu khác

 Có 2 loại chuyển đổi kiểu

 Ngầm định: giống như việc chuyển đổi số từ int sang double, ta chỉ cần gán trực tiếp

 Tường minh: giống như việc chuyển đổi số từ double sang int, ta phải sử dụng toán tử chuyển đổi kiểu (int)

 Cú pháp:

public static <loại chuyển đổi> operator <tên kiểu đích>(biến cần chuyển kiểu);

Trang 14

Ví dụ

class PhanSo

{ int tu, mau;

public static implicit operator double ( PhanSo a) {

return ( double )a.tu / a.mau;

} public static explicit operator int ( PhanSo a) {

return a.tu / a.mau;

} public PhanSo ( int tu, int mau) {

this tu = tu;

this mau = mau;

} }

Trang 15

Ví dụ

static void Main(string[] args) {

PhanSo a = new PhanSo(1, 2); PhanSo b = new PhanSo(15, 4); double d1 = a; // d = 0.5

int i = (int)b; // i = 3

}

Trang 16

Anonymous Types

Kiểu dữ liệu ẩn danh

Trang 17

Anonymous

Types

 C# cho phép ta đóng gói các dữ liệu chỉ đọc (readonly) vào 1 đối tượng mà không cần khai báo kiểu dữ liệu trước

static void Main(string[] args) {

var a = new { ID = 1, Name = "Linh" };

Console.WriteLine("{0} {1}", a.ID, a.Name); }

 Thường sử dụng trong các truy vấn LINQ

Trang 18

Chú ý

 Ta không thể điều khiển được tên của kiểu ẩn danh

 Kiểu ẩn danh luôn kế thừa từ lớp System.Object

 Các trường và thuộc tính trong kiểu ẩn danh luôn là chỉ đọc

 Kiểu ẩn danh không có các event, phương thức, toán tử, phương thức ghi đè

 Ta không thể kế thừa từ 1 kiểu ẩn danh

 Kiểu ẩn danh luôn được khởi tạo bằng hàm khởi tạo mặc định (không tham số)

Ngày đăng: 18/04/2014, 16:25

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm