Các Chủ Đề Tiến Bộ Trong C# part 2
Số trang: 11
Loại file: pdf
Dung lượng: 169.41 KB
Lượt xem: 17
Lượt tải: 0
Xem trước 2 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
Các ép kiểu do người dùng định nghĩa Trong các chương trước ta được học về cách chuyển đổi giá trị giữa những kiểu dữ liệu cơ bản. chúng ta cũng đã học hai cách ép kiểu là : - Không tường minh (Implicit)
Nội dung trích xuất từ tài liệu:
Các Chủ Đề Tiến Bộ Trong C# part 2Các ép kiểu do người dùng định nghĩaTrong các chương trước ta được học về cách chuyển đổi giá trị giữa những kiểu dữ liệucơ bản. chúng ta cũng đã học hai cách ép kiểu là : - Không tường minh (Implicit) - Tường minh (Explicit)Vì c# cho phép ta định nghĩa những lớp và cấu trúc riêng,do đó ta cũng muốn có nhữngcách thức mà cho phép ta chuyển đổi giữa những loại dữ liệu của riêng ta. C# cho phéplàm điều đó.cơ chế của nó là ta có thể định nghĩa một ép kiểu như là một thao tác thànhviên của một trong những lớp thích hợp. việc ép kiểu phải được đánh dấu là implicit hoặcexplicit để chỉ định cách mà bạn muốn sử dụng với nó. cũng giống như việc ép kiểu cơbản : nếu bạn biết việc ép kiểu là an toàn ,dù là bất cứ giá trị nào đựợc giữ bởi biếnnguồn, thì bạn định nghĩa nó như là implicit.ngược lại nếu bạn biết việc ép kiểu có thể điđến sự liều lĩnh - mất dữ liệu hay một biệt lệ sẽ bị tung ra - bạn nên định nghĩa ép kiểunhư là explicit.Bạn nên định nghĩa bất kỳ kiểu ép kiểu mà bạn viết là tường minh nếu có bất kì giá trị dữliệu nguồn nào mà việc ép kiểu có khả năng thất bại, hoặc nếu có sự mạo hiểm do mộtbiệt lệ được tung ra.Cú pháp của việc định nghĩa ép kiểu cũng giống như việc overload thao tác . không phảingẫu nhiên mà ta nói thế , bởi vì theo cách mà ép kiểu được xem như là thao tác là tácđộng của nó là chuyển từ kiểu dữ liệu nguồn sang kiểu dữ liệu đích. để minh hoạ cho cúpháp này, cú pháp sau được lấy từ ví dụ mà sẽ được giới thiệu sau đây trong phần này:public static implicit operator float (Currency value){// xử lí}Đoạn mã này là một phần của cấu trúc - currency - được dùng để lưu trữ tiền.ép kiểuđược định nghĩa ở đây cho phép chúng ta chuyển đổi 1 cách ẩn dụ giá trị của 1 kiểu tiềntệ sang 1 số thực ( float). chú ý rằng nếu việc chuyển được khai báo như là implicit, thìtrình biên dịch cho phép nó sử dụng cả implicit và explicit. nếu nó được khai báo như làexplicit , thì trình biên dịch chỉ cho phép nó sử dụng như là explicit.Trong khai báo này việc ép kiểu được khai báo là static. giống như các thao tác đượcoverload , C# đòi hỏi việc ép kiểu là static. điều này có nghĩa là mỗi ép kiểu cũng lấy mộtthông số , mà là kiểu dữ liệu trong nguồnThực hành ép kiểu dữ liệu do người sử dụng định nghĩa.Trong phần này, chúng ta sẽ xem xét việc ép kiểu implicit và explicit của kiểu dữ liệunày trong ví dụ Simplecurrency. trong ví dụ này chúng ta định nghĩa 1 cấu trúc struct,currency, mà giữ tiền USA. thông thường, C# cung cấp kiểu thập phân ( decimal) chomục đích này, nhưng bạn vẫn có thể viết riêng 1 cấu trúc struct hay một lớp để trình bàygiá trị tiền nếu bạn muốn biểu diễn quy trình tài chính phức tạp và do đó muốn có mộtphương thức cụ thể để thực thi như là một lớp.cấu trúc của ép kiểu là giống nhau cho struct hay lớp . trong ví dụ này là struct, nhưng nócũng làm việc tốt nếu bạn khai báo currency như là một lớp.khởi đầu , định nghĩa cấu trúc currency như sau:struct Currency{public uint Dollars;public ushort Cents;public Currency(uint dollars, ushort cents){this.Dollars = dollars;this.Cents = cents;}Việc dùng kiểu dữ liệu không dấu cho trường Dollar và cent bảo đảm rằng một thể hiệncủa currency chỉ giữ 1 số dương.chúng ta giới hạn nó bằng cách này để có thể minh hoạmột số điểm về tường minh sau này.để giữ cho lớp đơn giản,ta chọn các trường là public,nhưng nói chung bạn sẽ phải định nghĩa chúng private, và định nghĩa những thuộc tínhđáp ứng cho dollar và centChúng ta hãy bắt đầu bằng cách giả sử như là bạn muốn chuyển giá trị từ currency sangfloat, mà phần nguyên của kiểu float sẽ trình bày dollar:Currency balance = new Currency(10,50);float f = balance; // ta muốn f được đặt là 10.5Để cho phép làm điều này , cần định nghĩa 1 ép kiểu. từ đây ta thêm vào trong cấu trúccurrency:public static implicit operator float (Currency value){return value.Dollars + (value.Cents/100.0f);}Ép kiểu này là implicit, Đây là sự chọn lựa dễ nhận thấy , bởi vì , nó nên rõ ràng từ địnhnghĩa trong currency, bất kì giá trị nào lưu trữ trong currency cũng có thể lưu trong kiểufloat.Nếu chuyển ngược thì sao? từ một số float sang currency .trong trường hợp này việcchuyển đổi có thể không làm việc ,nếu float lưu trữ số âm,còn currency thì không , và sốnày sẽ lưu trữ phần làm tròn vào trong trường dollar của currency.nếu float chứa đựngmột giá trị không thích hợp việc chuyển nó sẽ gây ra một kết quả không dự đoán truớc.do đó việc chuyển đổi này nên được khai báo là explicit. sau đây là đoạn mã thử đầu tiên, tuy nhiên nó không gửi kết quả hoàn toàn đúng:public static explicit operator Currency (float value){uint dollars = (uint)value;ushort cents = (ushort)((value-dollars)*100);return new Currency(dollars, cents);}Đoạn mã sau sẽ dịch đúng :float amount = 45.63f;Currency amount2 = (Currency)amount;Tuy nhiên đoạn mã sau sẽ báo lỗi bởi vì nó sử dụng một ép kiểu tường mình một cáchkhông rõ rà ...
Nội dung trích xuất từ tài liệu:
Các Chủ Đề Tiến Bộ Trong C# part 2Các ép kiểu do người dùng định nghĩaTrong các chương trước ta được học về cách chuyển đổi giá trị giữa những kiểu dữ liệucơ bản. chúng ta cũng đã học hai cách ép kiểu là : - Không tường minh (Implicit) - Tường minh (Explicit)Vì c# cho phép ta định nghĩa những lớp và cấu trúc riêng,do đó ta cũng muốn có nhữngcách thức mà cho phép ta chuyển đổi giữa những loại dữ liệu của riêng ta. C# cho phéplàm điều đó.cơ chế của nó là ta có thể định nghĩa một ép kiểu như là một thao tác thànhviên của một trong những lớp thích hợp. việc ép kiểu phải được đánh dấu là implicit hoặcexplicit để chỉ định cách mà bạn muốn sử dụng với nó. cũng giống như việc ép kiểu cơbản : nếu bạn biết việc ép kiểu là an toàn ,dù là bất cứ giá trị nào đựợc giữ bởi biếnnguồn, thì bạn định nghĩa nó như là implicit.ngược lại nếu bạn biết việc ép kiểu có thể điđến sự liều lĩnh - mất dữ liệu hay một biệt lệ sẽ bị tung ra - bạn nên định nghĩa ép kiểunhư là explicit.Bạn nên định nghĩa bất kỳ kiểu ép kiểu mà bạn viết là tường minh nếu có bất kì giá trị dữliệu nguồn nào mà việc ép kiểu có khả năng thất bại, hoặc nếu có sự mạo hiểm do mộtbiệt lệ được tung ra.Cú pháp của việc định nghĩa ép kiểu cũng giống như việc overload thao tác . không phảingẫu nhiên mà ta nói thế , bởi vì theo cách mà ép kiểu được xem như là thao tác là tácđộng của nó là chuyển từ kiểu dữ liệu nguồn sang kiểu dữ liệu đích. để minh hoạ cho cúpháp này, cú pháp sau được lấy từ ví dụ mà sẽ được giới thiệu sau đây trong phần này:public static implicit operator float (Currency value){// xử lí}Đoạn mã này là một phần của cấu trúc - currency - được dùng để lưu trữ tiền.ép kiểuđược định nghĩa ở đây cho phép chúng ta chuyển đổi 1 cách ẩn dụ giá trị của 1 kiểu tiềntệ sang 1 số thực ( float). chú ý rằng nếu việc chuyển được khai báo như là implicit, thìtrình biên dịch cho phép nó sử dụng cả implicit và explicit. nếu nó được khai báo như làexplicit , thì trình biên dịch chỉ cho phép nó sử dụng như là explicit.Trong khai báo này việc ép kiểu được khai báo là static. giống như các thao tác đượcoverload , C# đòi hỏi việc ép kiểu là static. điều này có nghĩa là mỗi ép kiểu cũng lấy mộtthông số , mà là kiểu dữ liệu trong nguồnThực hành ép kiểu dữ liệu do người sử dụng định nghĩa.Trong phần này, chúng ta sẽ xem xét việc ép kiểu implicit và explicit của kiểu dữ liệunày trong ví dụ Simplecurrency. trong ví dụ này chúng ta định nghĩa 1 cấu trúc struct,currency, mà giữ tiền USA. thông thường, C# cung cấp kiểu thập phân ( decimal) chomục đích này, nhưng bạn vẫn có thể viết riêng 1 cấu trúc struct hay một lớp để trình bàygiá trị tiền nếu bạn muốn biểu diễn quy trình tài chính phức tạp và do đó muốn có mộtphương thức cụ thể để thực thi như là một lớp.cấu trúc của ép kiểu là giống nhau cho struct hay lớp . trong ví dụ này là struct, nhưng nócũng làm việc tốt nếu bạn khai báo currency như là một lớp.khởi đầu , định nghĩa cấu trúc currency như sau:struct Currency{public uint Dollars;public ushort Cents;public Currency(uint dollars, ushort cents){this.Dollars = dollars;this.Cents = cents;}Việc dùng kiểu dữ liệu không dấu cho trường Dollar và cent bảo đảm rằng một thể hiệncủa currency chỉ giữ 1 số dương.chúng ta giới hạn nó bằng cách này để có thể minh hoạmột số điểm về tường minh sau này.để giữ cho lớp đơn giản,ta chọn các trường là public,nhưng nói chung bạn sẽ phải định nghĩa chúng private, và định nghĩa những thuộc tínhđáp ứng cho dollar và centChúng ta hãy bắt đầu bằng cách giả sử như là bạn muốn chuyển giá trị từ currency sangfloat, mà phần nguyên của kiểu float sẽ trình bày dollar:Currency balance = new Currency(10,50);float f = balance; // ta muốn f được đặt là 10.5Để cho phép làm điều này , cần định nghĩa 1 ép kiểu. từ đây ta thêm vào trong cấu trúccurrency:public static implicit operator float (Currency value){return value.Dollars + (value.Cents/100.0f);}Ép kiểu này là implicit, Đây là sự chọn lựa dễ nhận thấy , bởi vì , nó nên rõ ràng từ địnhnghĩa trong currency, bất kì giá trị nào lưu trữ trong currency cũng có thể lưu trong kiểufloat.Nếu chuyển ngược thì sao? từ một số float sang currency .trong trường hợp này việcchuyển đổi có thể không làm việc ,nếu float lưu trữ số âm,còn currency thì không , và sốnày sẽ lưu trữ phần làm tròn vào trong trường dollar của currency.nếu float chứa đựngmột giá trị không thích hợp việc chuyển nó sẽ gây ra một kết quả không dự đoán truớc.do đó việc chuyển đổi này nên được khai báo là explicit. sau đây là đoạn mã thử đầu tiên, tuy nhiên nó không gửi kết quả hoàn toàn đúng:public static explicit operator Currency (float value){uint dollars = (uint)value;ushort cents = (ushort)((value-dollars)*100);return new Currency(dollars, cents);}Đoạn mã sau sẽ dịch đúng :float amount = 45.63f;Currency amount2 = (Currency)amount;Tuy nhiên đoạn mã sau sẽ báo lỗi bởi vì nó sử dụng một ép kiểu tường mình một cáchkhông rõ rà ...
Tìm kiếm theo từ khóa liên quan:
máy tính mạng máy tính internet C# ngôn ngữ C# ngôn ngữ ngôn ngữ lập trình lập trình phần mềm file ứng dụngGợi ý tài liệu liên quan:
-
Giáo trình Lập trình hướng đối tượng: Phần 2
154 trang 274 0 0 -
Giáo án Tin học lớp 9 (Trọn bộ cả năm)
149 trang 265 0 0 -
Bài thuyết trình Ngôn ngữ lập trình: Hệ điều hành Window Mobile
30 trang 265 0 0 -
Kỹ thuật lập trình trên Visual Basic 2005
148 trang 264 0 0 -
Ngân hàng câu hỏi trắc nghiệm môn mạng máy tính
99 trang 252 1 0 -
Giáo trình Hệ thống mạng máy tính CCNA (Tập 4): Phần 2
102 trang 247 0 0 -
Bài giảng: Lịch sử phát triển hệ thống mạng
118 trang 246 0 0 -
47 trang 238 3 0
-
Đề cương chi tiết học phần Thiết kế và cài đặt mạng
3 trang 234 0 0 -
Giáo trình Lập trình cơ bản với C++: Phần 1
77 trang 232 0 0