Ở bài trước mình đã giới thiệu các bài toán cơ bản trong lập trình C#, bài này mình sẽ giới thiệu một số ví dụ về Boxing và lớp niêm phong.
Chương trình C # để thực hiện hoạt động Boxing và Unboxing
Mới nghe tới từ boxing chúng ta thường liên tưởng đến môn thể thao quyền anh nổi tiếng, tưởng chừng không có liên quan gì trong lập trình C#. Nhưng thực chất nó là một vấn đề mà chúng ta nên tìm hiểu khi lập trình bằng ngôn ngữ C#.
Boxing là một khái niệm mới trong C#.
Mọi kiểu dữ liệu, dựng sẵn hay do người dùng định nghĩa, đều được lấy từ một lớp cơ bản là System.Object. Do đó việc đóng gói những kiểu căn bản hay nguyên thủy vào trong class Object được gọi là boxing, và thao tác ngược lại được gọi là unboxing.
Ví dụ sau đây chuyển đổi một biến nguyên i sang một đối tượng o sử dụng boxing. Sau đó, giá trị được lưu trữ trong biến i được thay đổi từ 123 thành 456. Ví dụ cho thấy các loại đối tượng ban đầu và đối tượng đóng gói sử dụng vị trí bộ nhớ riêng biệt, và do đó có thể lưu trữ các giá trị khác nhau.
using System; namespace VIDU { class TestBoxing { static void Main() { int i = 123; // Boxing sao chép giá trị của biến i sang đối tượng o. object o = i; // Thay đổi giá trị của i i = 456; System.Console.WriteLine("GIA TRI VALUE-TYPE CUA I = {0}", i); System.Console.WriteLine("GIA TRI OBJECT-TYPE CUA I = {0}", o); Console.ReadKey(); } } }
Đây là kết quả của chương trình C #:
GIA TRI VALUE-TYPE CUA I = 456 GIA TRI OBJECT-TYPE CUA I = 123
Đây là chương trình ví dụ về hoạt động unboxing C#:
using System; class sample { int data; void insert(object x) { data = (int)x * 5; } object delete() { data=0; return (object)data; } public static void Main() { sample s = new sample(); s.insert(10); Console.WriteLine("Data : {0}", s.data); Console.WriteLine("Data : {0}", s.delete()); Console.ReadLine(); } }
Đây là kết quả của chương trình C #:
Data : 50 Data : 0
Chương trình C# tạo lớp niêm phong
Lớp được niêm phong (Sealed class) là một lớp không cho các lớp khác kế thừa từ nó. Ví dụ khi bạn phát triển một thư viện class nào đấy, trong đó có một lớp có đầy đủ những chức năng cần thiết cho một nghiệp vụ nào đấy và bạn không muốn lớp này được dẫn xuất, mở rộng bởi những lập trình. Dưới đây là một ví dụ về lớp được niêm phong.
Đây là mã nguồn của chương trình C#:
using System; sealed class SealedClass { public int x; public int y; } class SealedTest { static void Main() { SealedClass sc = new SealedClass(); sc.x = 100; sc.y = 180; Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y); Console.ReadLine(); } }
Đây là kết quả của chương trình C #:
x = 100 ,y = 180
Chương trình C # để hiển thị diện tích của một mảnh đất
Đây là mã nguồn của chương trình C#:
using System; class dientich { public static void Main() { int dai,rong, dientich; Console.Write ("NHAP CHIEU DAI: "); dai = Convert.ToInt32 (Console.ReadLine()); Console.Write ( "NHAP CHIEU RONG:"); rong = Convert.ToInt32(Console.ReadLine()); dientich=dai*rong; Console.WriteLine ("DIEN TICH LA: " + dientich); Console.ReadLine(); } }
Đây là kết quả của chương trình C #:
NHAP CHIEU DAI: 20 NHAP CHIEU RONG : 20 DIEN TICH LA: 400
C # Chương trình để hiển thị tất cả các số nguyên tố giữa 1-100
Đây là mã nguồn của chương trình C#:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SoNguyenTo { class Program { static void Main(string[] args) { bool isPrime = true; Console.WriteLine("DAY SO NGUYEN TO : "); for (int i = 2; i <= 100; i++) { for (int j = 2; j <= 100; j++) { if (i != j && i % j == 0) { isPrime = false; break; } } if (isPrime) { Console.Write("\t" +i); } isPrime = true; } Console.ReadKey(); } } }
Đây là kết quả của chương trình C #:
DAY SO NGUYEN TO : 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97