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

Lớp đối tượng trong NET framework

15 202 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

Định dạng
Số trang 15
Dung lượng 122,97 KB

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

Nội dung

Chúng ta sẽ tìm hiểu một vài kiểu dữ liệu thường sử dụng trong chương này.. Bằng cách đưa vào các tập luật này, môi trường thực thi chung sẽ có thể thực thi một chương trình mà không qua

Trang 1

Lớp đối tượng trong NET

Framework

Bởi:

Khuyet Danh

Trong chương này chúng ta sẽ tìm hiểu các lớp cơ sở mà NET cung cấp, các lớp này đơn giản giúp chúng ta thực hiện tốt các thao tác nhập xuất, các thao tác truy cập hệ thống, thực thi các phép toán học,

NET Framework chứa số lượng nhiều những kiểu dữ lớp, những kiểu liệt kê, những cấu trúc, những giao diện và nhiều kiểu dữ liệu khác nữa Thật vậy, có hàng ngàn số lượng các kiểu như trên Những lớp này điều cho phép chúng ta sử dụng trong chương trình C#

Chúng ta sẽ tìm hiểu một vài kiểu dữ liệu thường sử dụng trong chương này Các lớp được trình bày thông qua các ví dụ minh họa đơn giản Từ những ví dụ minh họa cách

sử dụng các lớp cơ sở này chúng ta có thể mở rộng để tạo ra các chương trình phức tạp hơn

Common Language Specification (CLR)

Những lớp bên trong Framework được viết với ngôn ngữ được xác nhận là chung nhất (CLR) CLR đã được đề cập vào phần đầu của sách khi chúng ta thảo luận về MS.NET trong bài đầu

CLS là một tập hợp các luật hay các quy tắc mà tất cả các ngôn ngữ thực hiện bên trong NET platform phải tuân thủ theo Tập hợp luật này cũng bao gồm kiểu dữ liệu hệ thống chung, các kiểu dữ liệu cơ bản mà chúng ta được tìm hiểu trong chương 3 - Nền tảng ngôn ngữ C# Bằng cách đưa vào các tập luật này, môi trường thực thi chung sẽ có thể thực thi một chương trình mà không quan tâm đến cú pháp của ngôn ngữ được sử dụng

Lợi ích theo sau của CLS là mã nguồn được viết trong một ngôn ngữ có thể được gọi sử dụng bởi một ngôn ngữ khác Bởi vì thông thường bên trong Framework với CLS, chúng

có thể sử dụng không chỉ ngôn ngữ C# mà còn bất cứ ngôn ngữ tương thích với CLS như là Visual Basic.NET và JScript.NET

Trang 2

Kiểu dữ liệu trong namespace

Mã nguồn bên trong Framework được tổ chức bên trong namespace Có hàng trăm namespace bên trong Framework được sử dụng để tổ chức hàng ngàn lớp đối tượng và các kiểu dữ liệu khác

Một vài namespace thì được lưu trữ bên trong namespace khác Ví dụ chúng ta đã sử dụng kiểu dữ liệu DateTime được chứa trong namespace System Kiểu Random cũng được chứa trong namespace System Nhiều kiểu dữ liệu phục vụ cho thao tác nhập xuất cũng được lưu trữ trong một namespace chức trong namespace System là namespace System.IO Nhiều kiểu dữ liệu thường dùng để làm việc với dữ liệu XML thì được đặt bên trong namespace System.XML Chúng ta có thể tìm hiểu các namespace này trong các tài liệu trực tuyến của Microsoft như MSDN Online chẳng hạn

Tiêu chuẩn ECMA

Không phải tất cả kiểu dữ liệu bên trong namespace thì cần thiết phải tương thích với tất cả những ngôn ngữ khác Hơn thế nữa, những công cụ phát triển được tạo bởi những công ty khác cho ngôn ngữ C# có thể không bao hàm phải tương thích với mã nguồn thông thường

Khi ngôn ngữ C# được hình thành Microsoft xác nhận đưa ra một số lượng lớn các kiểu

dữ liệu cho cùng một bảng tiêu chuẩn cho C# để chuẩn hóa Bằng cách xác nhận những kiểu dữ liệu theo một tiêu chuẩn, điều này xem như việc mở cánh cửa cho những nhà phát triển khác tạo ra các công cụ và trình biên dịch C# cùng sử dụng những namespace

và kiểu dữ liệu Khi đó những mã nguồn bên trong những công cụ của Microsoft tương thích với bất cứ công cụ của các công ty khác

Những lớp đối tượng được chuẩn hóa thì được định vị bên trong namespace System Những namespace khác chứa những lớp không được chuẩn hóa Nếu một lớp không phải là một phần của tiêu chuẩn, nó sẽ không được hỗ trợ trong tất cả hệ điều hành

và môi trường thực thi mà chúng được viết để hỗ trợ C# Ví dụ, Microsoft thêm vào một vài namespace với SDK của nó như Microsoft.VisualBasic, Microsoft.CSharp, Microsoft.Jscript và Microsoft.Win32 Những namespace này không phải là một phần của tiêu chuẩn ECMA Do đó chúng có thể không có giá trị trong tất cả môi trường phát triển

Tìm hiểu những lớp Framework

Như chúng ta đã biết là có hàng ngàn những lớp và những kiểu dữ liệu khác bên trong thư viện cơ sở Có thể sẽ tốn vài cuốn sách có kích thước như giáo trình này để nói toàn

bộ về chúng Trước khi chúng ta tìm hiểu những lớp cơ bản, bạn có thể xem tổng quan tài liệu trực tuyến để biết thêm các lớp cơ cở Tất cả các lớp và những kiểu dữ liệu khác

Trang 3

được trình bày trong chương này điều là một phần của tiêu chuẩn được xác nhận bởi ECMA

Không những chúng ta có thể sử dụng những kiểu dữ liệu bên trong những lớp thư viện

mà chúng ta còn có thể mở rộng những kiểu dữ liệu này

Lớp Timer

Chúng ta bắt đầu với ví dụ đầu tiên sau Ví dụ minh họa này hết sức đơn giản và được thiết kế không được tốt

Hiển thị thời gian

-// Timer01.cs: Hiển thị ngày và thời gian

// nhấn Ctrl+C để thoát

namespace Programming_CSharp

{

using System;

public class Tester

{

public static void Main()

{

while (true)

{

Console.WriteLine("\n {0}", DateTime.Now);

}

}

Trang 4

}

-Kết quả:

12/24/2001 3:21:20 PM

-Như chúng ta có thể thấy, kết quả chương trình được thực thi vào lúc 3:21 vào ngày 24 tháng 12 Danh sách này thể hiện một đồng hồ xuất hiện ở dòng lệnh, và chúng dường như là được cập nhật trong mỗi giây đồng hồ Thật vậy, nó thông thường được cập nhật nhiều hơn một lần, do đó chúng ta lưu ý là giây đồng hồ thay đổi chỉ khi giá trị xuất hiện thật sự khác nhau Chương trình sẽ chạy mãi đến khi nào ta nhấn thoát bằng Ctrl + C

Trong chương trình ta sử dụng kiểu dữ liệu DateTime, đây là một cấu trúc được chứa trong namespace System bên trong thư viện cơ sở Cấu trúc này có một thuộc tính tĩnh

là Now trả về thời gian hiện hành Có nhiều dữ liệu thành viên và những phương thức được thêm vào trong cấu trúc DateTime Chúng ta có thể tìm hiểu thêm về DateTime trong thư viện trực tuyến về các lớp cơ sở của NET Framework

Cách tốt nhất để hiện thị ngày giờ trên màn hình là sử dụng Timer Một Timer cho phép một xử lý (hình thức của một delegate) được gọi tại một thời gian xác định hay sau một chu kỳ nào đó trôi qua Framework chứa một lớp Timer bên trong namespace System.Timers Lớp này được sử dụng trong ví dụ sau:

Sử dụng Timer

-

-// Timer02.cs: hiểu thị ngày giờ sử dụng Timer

// nhấn Ctrl+C hay ‘q’ và Enter để thoát

namespace Programming_CSharp

Trang 5

using System;

using System.Timers;

public class Tester

{

public static void Main()

{

Timer myTimer = new Timer();

// khai báo hàm xử lý

DisplayTimeEvent);

// khoảng thời gian delay

myTimer.Interval = 1000; myTimer.Start();

// thực hiện vòng lặp để chờ thoát

while ( Console.Read() != ‘q’)

{;

// không làm gì hết!

}

}

ElapsedEventArgs t)

{

Console.Write("\n{0}", DateTime.Now);

Trang 6

}

}

-

-Kết quả: 12/24/2001 3:45:20 PM

-

-Kết quả thực hiện cũng giống như ví dụ trước Tuy nhiên, chương trình này thực hiện tốt hơn nhiều so với chương trình ban đầu Thay vì cập nhật không ngừng ngày giờ được hiển thị, chương trình này chỉ cập nhật sau khoảng 1 giây Chúng ta hãy xem kỹ cách

mà Timer làm việc Một đối tượng Timer mới được tạo ra, thuộc tính Interval được thiết lập Tiếp theo phương thức sẽ được thực hiện sau khoảng thời gian interval được gắn với Timer Trong trường hợp này là phương thức DisplayTimeEvent sẽ đựơc thực thi, phương thức được định nghĩa ở bên dưới

Khi Timer thực hiện phương thức Start thì nó sẽ bắt đầu tính interval Một thuộc tính thành viên khác của Timer là AutoReset mà chúng ta cũng cần biết là: nếu chúng ta thay đổi giá trị mặc định của nó từ true sang false, thì sự kiện Timer chỉ thực hiện duy nhất một lần Khi AutoReset có giá trị true hay ta thiết lập giá trị true thì Timer sẽ kích hoạt

sự kiện và thực thi phương thức mỗi một thời gian được đưa ra (interval)

Trong chương trình này vẫn chứa một vòng lặp thực hiện đến khi nào người dùng nhấn

ký tự ‘q’ và Enter Nếu không chương trình thực hiện tiếp tục vòng lặp Không có gì thực hiện trong vòng lặp này, nếu muốn chúng ta có thể thêm vào trong vòng lặp những

xứ lý khác Chúng ta cũng không cần thiết phải gọi phương thức DisplayTimeEvent trong vòng lặp bởi vì nó sẽ được gọi tự động vào khoảng thời gian xác định interval

Timer trong chương trình này dùng để thể hiện ngày giờ trên màn hình Timer và những

sự kiện của Timer cũng có thể được sử dụng cho nhiều chương trình khác Như chúng ta

có thể tạo Timer để tắt một chương trình khác vào một thời điểm đưa ra Chúng ta cũng

Trang 7

có thể tạo chương trình backup thường xuyên để sao chép những dữ liệu quan trọng theo một định kỳ thời gian nào đó Hay chúng ta cũng có thể tạo một chương trình tự động log off một người sử dụng hay kết thúc một chương trình sau một khoảng thời gian mà không có bất cứ hoạt động nào xảy ra Nói chung là có rất nhiều cách sử dụng Timer này, và lớp Timer này rất hữa ích

Lớp về thư mục và hệ thống

Đôi khi chúng ta cần biết thông tin hệ thống của máy mà chương trình đang thực hiện, điều này không khó khăn gì, NET hỗ trợ một số lớp cơ bản để thực hiện việc này Trong

ví dụ minh họa bên dưới sẽ trình bày cách lấy các thông tin về máy tính và môi trường của nó Việc thực hiện này thông qua sử dụng lớp Environment, trong lớp này chứa một

số dữ liệu thành viên tĩnh và chúng ta sẽ thú vị với thông tin của chúng

Sử dụng lớp Environment

-// env01.cs: hiển thị thông tin của lớp Environment

namespace Programming_CSharp

{

using System;

class Tester

{

public static void Main()

{

Console.WriteLine("**************************");

Environment.CommandLine); Console.WriteLine("Curr Dir:

Environment.SystemDirectory); Console.WriteLine("Version: {0}", Environment.Version);

Trang 8

Console.WriteLine("OS Version: {0}", Environment.OSVersion);

Environment.MachineName);

Console.WriteLine("Memory: {0}", Environment.WorkingSet); // dùng một vài các phương thức

Console.WriteLine("**************************");

string [] args = Environment.GetCommandLineArgs();

for( int i = 0; i < args.Length; i++)

{

Console.WriteLine("Arg {0}: {1}", i, args[i]);

}

Console.WriteLine(“**************************”);

string [] drivers = Environment.GetLogicalDrives();

for( int i = 0; i < drivers.Length; i++)

{

Console.WriteLine(“Drive {0}: {1}”, i, drivers[i]);

}

Console.WriteLine(“**************************”);

Console.WriteLine("Path:

{0}",Environment.GetEnvironmentVariable("Path"));

Console.WriteLine("**************************");

}

Trang 9

}

-Kết quả thực hiện với máy tính của tác giả (kết quả sẽ khác với máy tính của bạn:)

**************************

Command: D:\Working\ConsoleApplication1\bin\Debug\Env01.exe

Curr Dir: D:\Working\ConsoleApplication1\bin\Debug

Sys Dir: C:\WINDOWS\System32

Version: 1.0.3705.0

OS Version: Microsoft Windows NT 5.1.2600.0

Machine: MUN Memory: 4575232

**************************

Arg 0: D:\Working\ConsoleApplication1\bin\Debug\Env01.exe

************************** Drive 0: A:\

Drive 1: C:\ Drive 2: D:\ Drive 3: E:\

************************** Path:

C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\

Wbem;C:\WINDOWS;C:\WINDO WS\COMMAND;C:\NC

**************************

-Như chúng ta thấy thì những thành viên tĩnh của lớp Environment cung cấp cho ta những thông tin hệ thống và môi trường Đầu tiên là lệnh thực hiện được đưa ra chính

là chương trình đang thực thi tức là chương trình Env01.exe, thuộc tính được dùng để lấy là Command- Line Thư mục hiện hành chính là thư mục chứa chương trình thực thi

Trang 10

thông qua thuộc tính CurrentDirectory Tương tự như vậy các thuộc tính hệ thống như: thư mục hệ thống, phiên bản OS, tên máy tính, bộ nhớ cũng được lấy ra

Tiếp theo là hai phương thức của lớp Environment trả về mảng chuỗi ký tự, bao gồm phương thức lấy đối mục dòng lệnh GetCommandLineArgs và phương thức nhận thông tin về ở đĩa logic trong máy tính GetLogicalDrives Hai vòng lặp đơn giản là để xuất giá trị từng thành phần trong mảng ra.Cuối cùng là phương thức GetEnvironmentVariable nhận biến môi trường và những giá trị của chúng trong hệ thống hiện thời

Lớp Math

Từ đầu tới giờ chúng ta chỉ thực hiện các phép toán cơ bản như cộng, trừ, nhân, chia, chia dư Còn rất nhiều các phép toán mạnh hơn và cũng thường sử dụng mà chúng chưa được đề cập tới C# cung cấp một tập hợp các phép toán toán học bên trong những lớp

cơ sở Chúng được chứa bên trong của namespace System.Math Bảng 12.1 sau liệt kê những hàm toán học

Lớp Math là lớp sealed, do đó chúng ta không thể xây dựng một lớp mới mà kế thừa từ lớp này được Thêm vào đó tất cả những lớp và dữ liệu thành viên đều là tĩnh, do vậy chúng ta không thể tạo một đối tượng có kiểu Math Thay vào đó chúng ta sẽ sử dụng những thành viên và phương thức với tên lớp

Phương thức của Math Lớp Math

Phương thức Mô tả

Abs Trả về trị tuyệt đối của một số

Ceiling Trả về giá trị nhỏ nhất hay bằng giá trị đưa ra

Exp Trả về giá trị e với mũ đưa ra

Floor Trả về giá trị lớn nhất hay bằng giá trị đưa ra

IEEERemainder Trả về phần dư của phép chia hai hai số thực Phép chia này theo

tiêu chuẩn của IEEE cho phép toán dấuchấm động nhị phân

Log Trả về giá trị logarit của giá trị đưa ra

Log10 Trả về giá trị logarit cơ số 10 của số đưa ra

Max Trả về số lớn trong hai số

Min Trả về số nhỏ trong hai số

Trang 11

Round Trả về giá trị được làm tròn

Sign Trả về giá trị dấu của một số -1 nếu số âm và 1 nếusố dương

Sqrt Trả về căn bậc hai của một số

Acos Trả về giá trị một góc mà cosin bằng với giá trị đưa ra

Asin Trả về giá trị một góc mà sin bằng với giá trị đưa ra

Atan Trả về giá trị của một góc mà tang bằng với góc đưara

Atan2 Trả về giá trị của một góc mà tang bằng với tang củađiểm (x,y) đưa

ra Cos Trả về giá trị cosin của một góc đưa ra

Cosh Trả về giá trị hyperbolic cosin của góc đưa ra

Sin Trả về giá trị sin của góc đưa ra

Sinh Trả về giá trị hyperbolic của góc đưa ra

Tan Trả về giá trị tang của góc

Tanh Trả về giá trị hyperbolic tang của góc

Ngoài ra lớp Math này cũng đưa vào hai hằng số: PI và số E, PI trả về giá trị pi trong toán học như là 3.14159265358979323846 Giá trị E trả về giá trị 2.7182818284590452354

Hầu hết các hàm toán học trong bảng trên dễ hiểu và dễ sử dụng Ví dụ sau minh họa việc sử dụng một số hàm toán học như sau:

Sử dụng một vài hàm toán học

-using System;

namespace Programming_CSharp

{

public class Tester

{

public static void Main()

Trang 12

int val2;

char ch;

for(double ctr = 0.0; ctr <= 10; ctr += 2)

{

val2 = (int) System.Math.Round((10*System.Math.Sin(ctr))); for( int ctr2 = -10; ctr2 <=10; ctr2++)

{

if (ctr2 == val2)

ch = 'x';

else

ch = ' '; Console.Write("{0}", ch);

}

Console.WriteLine(" ");

}

}

}

}

-Kết quả:

x

x

Trang 13

x x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

x

Trang 14

x

x

x x

x

x x

x

x x

x

x

x

x

x x

x x

x

x

x

x

x

x

x

Trang 15

-Vòng lặp đầu tiên thực hiện thông qua một biến lặp là một giá trị double, mỗi bước lặp tăng 2 Giá trị Sin được lấy thông qua việc sử dụng hàm Math.Sin Do giá trị Sin từ -1 đến 1 và để cho dễ hiển thị hơn, giá trị này được chuyển từ -10 đến 10 Để chuyển thành giá trị này thì ta nhân với 10 rồi sau đó thực hiện việc làm tròn bằng cách dùng hàm Round của Math

Kết quả của phép nhân và làm tròn là một giá trị từ -10 đến 10 được gán cho val2 Vòng lặp for thứ hai thực hiện việc xuất một ký tự ra màn hình

Ngày đăng: 31/12/2015, 21:45

TỪ KHÓA LIÊN QUAN

w