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

Tuan03 c net basic p2

22 2 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

Tiêu đề Lập Trình Ứng Dụng Quản Lý C#.NET Cơ Bản Phần Tiếp Theo
Trường học University of Information Technology
Chuyên ngành C#.NET Programming
Thể loại Bài giảng
Năm xuất bản 2018
Thành phố Ho Chi Minh City
Định dạng
Số trang 22
Dung lượng 858,08 KB

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

Nội dung

Lập trình Windows 9/18/2018 1 C# NET cơ bản phần tiếp theo Lập trình Ứng dụng quản lý Nội dung  Một vài C# keyword  Collections  Generics  Delegates 9/18/2018 2 Nội dung  Một vài C# keyword  Col[.]

Trang 1

C#.NET cơ bảnphần tiếp theoLập trình Ứng dụng quản lý

Trang 2

 Giúp chia class thành nhiều phần cài đặt.

{

Trang 3

C# keyword: as

 Chuyển đổi kiểu thực sự được thực hiện khi

runtime, không phải khi compile

object o = new CTest ();

null

C# keyword: is

 Sử dụng trong trường hợp thể hiện trong cây kế

thừa class Shape

Trang 4

 Trong NET cung cấp 2 loại collection

 Nongeneric collections (namespace

System.Collections).

 Generic collections (namespace

System.Collections.Generic)

Trang 5

Kiểu dữ liệu phần tử (item) là object.

ArrayList strArray = new ArrayList();

strArray AddRange( new string [] { "First" , "Second" , "Third" });

Console.WriteLine( "This collection has {0} items." , strArray Count);

Console.WriteLine();

strArray Add( "Fourth!" );

Console.WriteLine( "This collection has {0} items." , strArray Count);

foreach ( string s in strArray )

 Kiểm soát kiểu dữ liệu khó khăn

 Hiệu năng kém khi phải chuyển đổi kiểu dữ liệu

nhiều lần giữa value type và reference type

Trang 6

Generic nghĩa là “tổng quát” hàm ý đưa ra những cách làm

chung nhất cho nhiều vấn đề.

Tình huống ví dụ cần xây dựng 1 Ngăn xếp (Stack) chứa kiểu

dữ liệu int với các phương thức cơ bản như: push, pop,

check ,… Sau đó lại cần xây dựng cũng Stack với các phương

thức như vậy nhưng dữ liệu lại là string

 Giải pháp cho vấn đề trên?

public class IntStack

Trang 7

Giải pháp

 Cách đầu tiên thường làm: copy lại và thay đổi kiểu

dữ liệu trong code Nếu có yêu cầu đổi kiểu dữ liệu

sang float, double,…???

 Cách tốt hơn khi đã biết đến kiểu dữ liệu cơ sở trong

.NET là object Khi sử dụng kiểu dữ liệu object thì

Stackđã chấp nhận được mọi kiểu dữ liệu?

public class ObjectStack

Vấn đề của ObjectStack kể trên là dễ gây ra lỗi

runtime (tức là chỉ giải quyết tốt về mặt syntax)

 NET cung cấp giải pháp cho vấn đề này thông

qua khái niệm Generic.

//push vào kiểu string

s Push( "test" );

//lấy ra lại kiểu int

Trang 8

Generic Types

Generic là 1 tính năng mới trong NET

Framework 2.0 và và được tích hợp sâu trong

Common Language Runtime (CLR)

Trong NET Framework, Generic được giới thiệu

là khái niệm về các kiểu tham số và được dùng

để thiết kế class và method nhằm để trì hoãn chỉ

ra kiểu dữ liệu cho đến khi chúng được khai báo

hoặc khởi tạo

Một trong những điểm nổi bật của kiểu Generic

là cho phép kiểm tra cú pháp trong lúc biên dịch

Có thể sử dụng nhiều kiểu dữ liệu khác nhau với

cùng 1 đoạn code (tương tự như khái niệm

Template trong C++)

Tham số T

Bằng cách sử dụng tham số T là tham số chung, cho phép

tạo 1 class duy nhất và sử dụng cho nhiều type khác

Trang 9

Generic Methods

 Là các hàm thông dụng (cách hành xử chung cho

các typekhác nhau) nên cài đặt theo kiểu

Generic (sử dụng các tham số đầu vào hay đầu

Swap< int >( ref iX , ref iY );

Swap< float >( ref fX , ref fY );

C# keyword: default

 Lấy giá trị mặc định với các tính chất sau:

Numeric valuesthì giá trị default là 0

Reference typesthì giá trị default là null

Các Fieldđược gán default là 0 (nếu là value

type ) hoặc null (nếu là reference type)

Trang 10

Constraining Type Parameters

Generic Constraint Ý nghĩa

NameOfBaseClass

NameOfInterface class GenericTest < > where T : struct

{

T x , y

}

GenericTest < int > gti = new GenericTest < int >();

GenericTest <string> gts = new GenericTest < string >();

Trang 11

Delegatelà kiểu dữ liệu tham chiếu được dùng

để đóng gói một phương thức với tham số và

kiểu trả về xác định

Với delegate một chương trình có thể thực thi

động (dynamic) các phương thức (method) khác

nhau trong quá trình chạy (runtime).

Sau khi methodđược đóng gói trong delegate,

nó sẽ được thực thi (called) khi delegate được

chạy (invoked).

Khai báo delegate

Trang 12

Ví dụ

// khai báo delegate

delegate decimal ProcessCalculateHandler ( decimal d1, decimal d2);

static void Main ( string [] args)

{

// tạo đối tượng delegate

ProcessCalculateHandler pcA = new ProcessCalculateHandler ( AddCalculate );

TinhToan (pcA);

}

// method hợp với delegate đã khai báo

static decimal AddCalculate ( decimal d1, decimal d2)

{

return d1 + d2;

}

// phương thức có tham số là delegate

static void TinhToan ( ProcessCalculateHandler pc)

 Với mảng các đối tượng SinhVien

 Cần sắp xếp mảng theo các tiêu chí khác nhau, giải

pháp???

{

}

SinhVien [] arrSV;

Trang 13

delegate int SoSanhHandler ( SinhVien sv1, SinhVien sv2);

static void SapXep( SinhVien [] arrSV, SoSanhHandler ssFunc)

Trang 14

Sử dụng delegate để gửi thông báo

 Xét yêucầu quản lý cấp độ thẻ thành viên của

siêuthị Khi khách hàng tích lũy điểm nhờ mua

static uint muc1 = 20, muc2 = 30, muc3 = 50;

public string HoTen { get ; }

public string CapDo { get ; private set ; }

public uint DiemTichLuy { get ; private set ; }

public KhachHang( string ht)

Trang 15

class SieuThi

{

List < KhachHang > DsKhachHang = new List < KhachHang >();

st.ThemKhachHang( new KhachHang ( "ABC" ));

Trang 16

Giải pháp 1

 Thêmcờ kiểm soát việc chúc mừng của siêu thị

trong class KhachHang

 Thêmphương thức tổng duyệt khách hàng trong

class SieuThi

{

{

{ ChucMungKH(kh);

} }

{

CapDo = "Cap2" ; }

{

CapDo = "Cap1" ; }

Trang 17

static void Main( string [] args)

{

st.DsKhachHang.Add( new KhachHang ( "ABC" ));

handlers( this );

} }

Trang 18

 Thay đổi trong class SieuThi

 Mục tiêu là đăng ký theo dõi KhachHang ngay khi

tạo

 Hàm main sẽ không cần thay đổi…

 Về vấn đề nơi kiểm soát để phát sinh thông báo?

 Khi có số lượng lớn đối tượng có thể phát sinh

thông báo?

Trang 19

Cơ chế multicasting cho phép gọi hai hay nhiều

phương thức thực thi thông qua một ủy quyền

đơn Mục đích chính là với một delegate có thể

gọi thực hiện nhiều hơn một phương thức Để

thực hiện được thì kiểu trả về của delegate phải

delegate void MultiHandler ( decimal d1 , decimal d2 );

static void Main ( string [] args )

{

Trang 20

Áp dụng

 Xét lại ví dụ về Siêu thị và Khách hàng nếu có

thêm các bộ phận hay đối tác cũng cần quan tâm

đến việc thay đổi cấp độ của khách hàng?

 Bộ phận khuyến mãi cần gửi ưu đãi khuyến mãi

mới

 Đối tác Tài chính muốn tặng ưu đãi

 Thay đổi hàm đăng ký để áp dụng multicasting

 Xây dựng class CtyTaiChinh

static string TenCty = "CtyABC" ;

Trang 21

 Thay đổi trong class SieuThi

{

List < KhachHang > DsKhachHang = new List < KhachHang >();

st.ThemKhachHang( new KhachHang ( "ABC" ));

st.ThemKhachHang( new KhachHang ( "GHJ" ));

st.ThemKhachHang( new KhachHang ( "NMVVB" ));

Ngày đăng: 09/04/2023, 06:29

TỪ KHÓA LIÊN QUAN