C Sharp căn bản – Chương IV – XÂY DỰNG LỚP – ĐỐI TƯỢNG 0 (0)

C Sharp căn bản – Chương IV – XÂY DỰNG LỚP – ĐỐI TƯỢNG 0 (0)

C Sharp căn bản – Chương IV – XÂY DỰNG LỚP – ĐỐI TƯỢNG 0 (0)

Learn more »

Chương 3 tho lun rất nhiều kiểu dữ liệu cơ bca ngôn ngữ C#, như intlong and char. Tuy nhiên ti tim và linh hồn của C# là khả năntạo ra những kiểu dữ liệu mới, phức tạp. Người ltrình tạo ra c kiu dữ liệu mới bằng cách xây dựnlp đối tượng và đó cũnchính là cávấn đề chúntcn thảo luậtrong chương này.

Đâlà khả năng để tạo ra nhng kiểu dữ limi, một đc tính quan trọng ca ngôn ngữ lập trình hưng đối tưng. Chúng tcó thể xây dựng những kiểu dữ liệu mtrong ngôn ngữ C# bằncách khai báo và định nghĩa nhng lớp. Ngoài ra tcũncó thể định nghĩa các kiểu dữ liu với những giao diện (interfacesẽ đưc bàtrong Chương 8 sau. Thể hiện ca một lớp đưc gọi là những đối tượng (object). Những đối tưng này đưtạo trong bộ nhớ khi chương trình được thc hiện.

Sự khác nhau gia một lớp và một đối tưng cũng giống như sự khác nhau gia khái niệm  giloài  mèo  và một  con mèo Mun  đang nằm  bên chân  của ta. Chúng ta không thể đụng chạm hay đùa giỡn vi khái niệm mèo nhưncó thể thc hiện điu đó đưc với mèo Mun, nó là một thc thể sống động, chứ không trừu tượng như khái niệm họ loài mèo.

Một họ o mô tả những comèo có các đc tínhcó trng lượng, có chicao, màu mt, màu lông,…chúng cũng có hành động như là ăn ngủ, leo trèo,…một con mèo, ví dụ như mèo Mun chng hạn, nó cũng có trọng lượng xác định là 5 kgchiu cao 15 cm, màu mắt đen, lông đen…Nó cũng có nhng khả năng như ăn ngủ letrèo,..

Lợi ích to lớn ca những lớp trong ngôn ngữ lập trình là khả năng đóng gói c thuc tính và tính chcủa một thc thể trong một khối đơn, tự có nghĩa, tự khả năng duy trì . Ví dụ khi chúng ta muốn sắp nội dung những thể hiện hay đối tưng của lớp điều khiển ListBotrên Windows, chỉ cần gọi c đối tưng này thì chúng sẽ tự sắp xếp, còn việchúng làm ra sao thì ta không quatâm, và cũnchỉ cn biết by nhu đó thôi.

Đóng gói cùng với đa hình (polymorphism) và kế tha (inheritance) là các thutính chính yếcủa bất kỳ một ngôn ngữ lp trình hướng đối tượng nào.

Chương 4 này sẽ trình bày các đtính ca ngôn ngữ lập trình C# để xây dng các lớp đối tưng. Thành phn ca một lớp, các hành vi và các thuc tính, đưc xem như là thành viên  của  lớp  (class  member).  Tiếp  theo  chương  cũng  trình  này khái  niệm  về  phương  thức (method) được dùng để định nghĩa hành vi của một lớp, và trạng thácủa các biến thành viên hot động trong một lớp. Một đặc tính mới mà ngôn ngữ C# đưa ra để xây dựng lớp là khái niệm thuc tính (property), thành phần thutính này hoạt động giống như ch phươnthc để tạo một lớp, nhưng bản chấcủa phương thức nàlà tạo một lp giao diệcho bên ngoài tương c với biến thành viên một cách gián tiếp, ta sẽ bàn sâu vấn đề nàtrong chương.

Định nghĩa lớp

 

Để định nghĩa một kiểu dữ liệu mhamột lớp đầu tiên phải khabáo rồi sau đó mới định nghĩcác thuc tính và phương thca kiểu dữ liệu đó. Khai báo một lớp bng cách sử dụng từ khoá classCú pháđy đủ ca khai báo một lớp như sau:

[Thuộtính] [Bổ sung truy cập] clas<Định danh lp> [: Lớp cơ s]

 

{

<Phần thân ca lớp: bao gồm định nghĩa các thutính và

 

phương thc hành động >

 

}

 

Thành phần thuộc tính ca đối tượng sẽ đưtrình bày chi tiết tronchương sau, còthành phn bổ sung trucậcũng sẽ được trình bàtiếngay mục dưiĐnh danh lớp chính là tên ca lớp do người xây dng chươntrình tạo ra. Lớp cơ sở là lớp mà đối tưnsẽ kế tha để phátriển tsẽ bàn sau. Tcả c thành viên của lp được định nghĩa bên trong thân ca lớp, phthânàsẽ đưc bao bọc bi hai du ({}).

Ghi chúTrong ngôn ngữ C# phn kếthúc ca lớp không có đấu chấm phy giống như khai bálớp trong ngôn ngữ C/C++. Tuy nhiên nếu ngưlập trình thêm vào thì trình biên dch C# vchp nhận mà không đưrcảnh o lỗi.

Trong C#, mọi chuyn đều xy ra trong một lớp. Như c ví dụ mà chúng tđã tìm hiểu trong chương 3, cáhàm điều được đưa vào trong một lớp, kể cả hàm đầu vào của chươntrình (hàm Main()):

public class Tester

 

{

 

public static int Main()

 

{

 

//....

 

}

 

}

 

Điu cn nói ở đâlà chúng ta chưtạo bcứ thể hiện nàcủa lớp, tc là to đối tượng cho

lớp Tester. Điu gì khác nhagimột lớp và thể hiện của lớp? để trả lới cho u hỏi này chúnta bắt đu xem xésự khác nhau giữa kiu dữ liệu int và một biến kiểu int Tcó viết như sau:

int var1 = 10;

tuy nhiên ta không thể viết đưc

 

int = 10;

Ta không thể gán giá trị cho một kiểu dữ liu, thay vào đó tchỉ đưgán dữ licho một đối tượng ca kiểu dữ lịêu đó, trong tng hợp trên đối tượng là biếvar1.

Khi chúng ttạo một lớp mới, đó chính là vic định nghĩa các thuc tính và hành vi của tất cả các đối tưncủa lớp. Giả sử chúng ta đanltrình để tạo c điều khiểtrong c ứng dụng trên Windowscác điều khiển này giúp cho ni dùng tương tác tốt với Windows, như là ListBoxTextBoxComboBox,…Một trong nhng điều khin thông dụng là ListBox, điều khiển này cuncấp một danh sách liệt kê c mục chọn và cho phép người dùng chọn các mục tin trong đó.

ListBonàcũng có các thuc tính khác nhau nhu: chiều cao, bề dày, vị trí, và màu sắc thể hiện và các hành vi của chúng như: chúng có thể thêm bới mục tin, sắp xếp,…

 

Ngôn ngữ lập trình hưng đối tượncho phép chúntto kiểu dữ liệu mới là lớp ListBox, lớp  này  bao  bọc  các  thuộc  tính  cũng  như  khả  năng  như:  các  thuc  tính height,  widthlocationcolorc phương thức hay hành vi như Add(), Remove(), Sort(),

Chúng ta không thể gán dữ liệu cho kiểu ListBox, thay vào đó đầu tiên ta phải tạo một đối tượng cho lớp đó:

ListBomyListBox;

Một khi chúng ta đã tạo một thể hiện clListBothì ta có thể gán dữ liệu cho thể hiện đó. Tuy nhiên đoạn lệnh trên chưa thể tạo đối tượng trong bộ nhớ đưc, ta sẽ bàn tiếp. Bâgiờ ta sẽ tìm hiểu cách tạo một lớp và tạcác thể hiện thông qua ví dụ minh họa 4.1. Ví dụ này to một lớp có chc năng hiểu thị thời giatrong một ngày. Lớp nàcó hành vi thể hiện ngày, tháng, năm, giờ, phút, giây hiện hành. Để làm đưc điều trên thì lớp nàcó 6 thuc tính hay còn gọi là biến thành vn, cùng với một phương thức như sau:

Ví dụ 4.1: Tạo một lớp Thoigian đơn giản như sau.

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

 

using System;

 

public class ThoiGian

 

{

 

public void ThoiGianHienHanh()

 

{

 

Console.WriteLine(Hien thi thoi gian hien hanh”);

 

}

 

// Các biến thành viên int Nam;

int Thang; int Ngay; int Gio;

int Phut;

 

int Giay;

 

 

}

 

public class Tester

 

{

 

static void Main()

 

{

 

ThoiGian t = new ThoiGian();

 

t.ThoiGianHienHanh();

 

}

 

}

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Kết quả:

 

Hien thi thoi gian hien hanh

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Lớp  ThoiGiachỉ  có  một  phương  thức  chính  là  hàm ThoiGianHienHanh(),  phần  tn  của phương thức này đưc định nghĩa bên trong của lớp ThoiGian. Điều này khác với ngôn ngữ C++C# không đòi hỏi phải khai báo tc khi định nghĩa một phươnthức, và cũng không hỗ trợ việc khai báo phương thức trong một ttin và sau đó định nghĩa ở một tập tin khác.

C# không có cátập tin tiêđề, do vtất cả c phương thức đưc định nghĩa hoàtoàn bên trong  của  lớp.  Phần  cuối  của  đnh  nghĩa  lớp  là  phn  khai  báo  c  biến  thành  viên: NamThangNgayGioPhut, va Giay.

Sau khi định nghĩa xong lớp ThoiGian, thì tiếp theo là phn đnh nghĩa lớp Tester, lớp nàcó cha một hàm khá thân thiện với chúng tlà hàMain()Bên trong hàm Main có một thể hiện của lớp ThoiGiađưtạo ra và gán giá trị cho đối tượnt. Bởi vì là thể hiệcủa đối tượng ThoiGiannên hàMain(có thể sử dụng phương thức ct:

t.ThoiGianHienHanh();

 

Thuộc tính truy cập

Thutính truy cập quyết định khả năng các phươnthức ca lớp bao gồm việc c phương thức clp khácó thể nhìn thấy và sử dụng c biếthành viên hay những phương thức bêtrong lớp. Bảng 4.1 tóm tắt các thutính trucậcủa một lớp trong C#.

 

 

Thuộc tính

Giới hạn trucập

public

Không  hạn  chế.  Những  thành  viên  đưc  đánh  du

publicó thể đưc dùng bi bt kì c phương thcủa lớp bao gồm nhng lớp khác.

private

Thành viên trong một lớp A đưc đánh dấu là private

thì chỉ đưtrucập bcác phương thcủa lớp A.

protected

Thành  viên trong lớp  A  đưc  đánh  dấu  là protected

thì chỉ đưc phươnthức bên trong lp A và những phươnthc dẫn xuất từ lớp A trucập.

internal

Thành viên trong lớp A đưc đánh dlà internal thì đưc  truy  cập  bởi  nhng  phương  thc  ca  bất  cứ  lp

nào trong cùng khối hp ngữ vA.

protected internal

Thành  viên trong lớp  A  đưc  đánh  dấu  là protected internal đưc trucập bởi các phương thcủa lớp A, các phương thcủa lớp dẫn xucủa A, và bcứ lp

nào trong cùng khối hp ngữ ca A.

 

Bảng 4.1: Thuộc tính trucập.

Mong muốn chunlà thiết kế các biến thành vn của lớp ở thuc tính private. Khi đó chỉ có phương thức thành viêcủa lớp trucập được giá trị ca biến. C# xem thutính privatlà mc đnh nêtrong ví dụ 4.1 ta không khai báo thuc tính trucập cho 6 biến nên mc định chúnlà private:

// Các biến thành viên privatint Nam;

int Thang; int Ngay; int Gio;

int Phut;

 

int Giay;

Do  lớp Testevà  phương thc  thành  viên ThoiGianHienHanh của lớp  ThoiGian đưc  khai bálà publinên bất kỳ lp nào cũng có thể trucập đưc.

Ghi chúThói quelập trình tốt là khai bátưng minh các thutính truy ccủa biến thành  viên  hay các phương thc  trong  một  lp.  Mặc dù  chúng ta biết  chc  chắn  rng  c thành vca lớp là đưc khai báprivatmặc đnh. Vic khai báo tường minh nàsẽ làm cho chươntrình dễ hiểu, rõ ràng và tự nhn hơn.

 

Tham số của phươnthức

 

Trong các ngôn ngữ lập trình thì tham số và đối mục đưc xem là như nhau, cũng tương

tự khi đang nói về ngôn ngữ hưng đối tưng thì ta gọi một hàlà một  phương thc hay hành viTất cả các tên này điều tương đồng với nhau.

Một phương thcó thể ly bkỳ số lưng tham số nào, Các tham số này theo sau bởi

tên của phươnthức và đưc bao bọc bêtrong du ngotròn (). Mỗi tham số phải khabáo kèm với kiểu dữ liệu. ví dụ ta có một khai báo định nghĩa một phương thức có tên là Method, phương thức không trả về giá trị nào cả (khai báo giá trị trả về là void), và có hatham số là một kiểu invà button:

void  Method( int param1, buttoparam2)

 

{

 

//…

 

}

 

Bên trong thân ca phươnthc, các tham số này đưc xem như nhng biến cc bộ, giống như là ta khai báo biếbên trong phương thc và khởi tạo giá trị bng giá trị ca thasố truyn vào. Ví dụ 4.2 minh họa việtruyền tham số vào một phương thức, trong trưng hp này thì hai tham số của kiểu là int và float.

Ví dụ 4.2: Truyền tham số cho phương thức.

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

using System;

 

public class Class1

 

{

 

public void SomeMethod(int p1, float p2)

 

{

 

Console.WriteLine(Ham nhan duoc hai tham so: {0} va {1}, p1,p2);

}

 

}

 

public class Tester

 

{

 

static void Main()

 

{

 

int var1 = 5;

 

float var2 = 10.5f;

 

Class1 c = new Class1();

 

c.SomeMethod( var1, var);

 

}

 

}

 

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Kết quả:

 

Ham nhan duoc hai tham so: 5 va 10.5

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Phương thSomeMethod sẽ ly hai tham số invà float rồi hiển thị chúng ta màn hình bng việc dùng hàm Console.WriteLine(). Nhữntham số nàcó tên là p1 và p2 đưc xem như là biến cc bộ bên trong ca phương thc.

Trong phươnthgọi Maincó hai biến cc bộ đưtạo ra là varvà var2. Khi hai biến y đưc truyn cho phương thSomeMethod thì chúng đưc ánh xạ tnh hai tham số p1 và

p2 theo thứ tự danh sách biến đưa vào.

 

Tạo đi tượng

 

Trong Chương 3 có đề cập đến sự khác nhau gia kiu dữ liệu giá trị và kiểu dữ liệu tham chiếu. Những kiểu dữ liệu chuẩn cC# như intcharfloat,… là nhng kiểu dữ liệu giá trị,

và các biến đưtạo ra từ các kiu dữ liệu này đưlưtrên stack. Tuy nhiên, vc đối tượng kiểu dữ liệu tham chiếthì đưc tạo ra trên heap, sử dụng từ khóa new để tạo một đối tượng:

ThoiGian t = new ThoiGian();

 

thật sự không chứa giá trị ca đối tưnThoiGian, nó chỉ chứa đchỉ của đối tượng đưtạo ra trên heap, do vchỉ cha tham chiếu đến một đối tượng mà thôi.

 

Bộ khởi dng

 

Thử xem lại ví dụ minh họa 4.1, u lnh to một đối tượng cho lớp ThoiGiatương tự như việc gọi thc hiện một phương thc:

ThoiGian t = new ThoiGian();

Đúng  như  vy,  một  phương  thc  sẽ  đưc  gi  thực  hin  khi  chúng  ta  tạo  một  đi  tưng. Phương  thc này đưc gọi là bộ  khi  dng (constructor).  Các phương  thc này đưc định nghĩa khi xây dựnlớp, nếta khôntạo ra thì CLR sẽ thay mt chúnta mà to phương thc khởi dựng một cách mc định. Chức năng ca bộ khi dựng là to ra đối tưng đưc xác định bởi một lớp và đtrng thái này hlTc khi bộ khởi dựng đưc thc hiện thì đối tưng chưa đưcấp phát trong bộ nhớ. Sau khi bộ khi dng thc hiện hoàn thành thì bộ nhớ sẽ

lưu giữ một thể hiện hợp lệ của lp va khai báo.

Lớp ThoiGiatrong ví dụ 4.1 không định nghĩa bộ khởi dựng. Do không định nghĩa nên trình biên dch sẽ cung cấp một bộ khởi dựncho chúng ta. Pơng thc khởi dng mặc định đưtạo ra cho một đối tượnsẽ không thc hiệbất cứ hành động nào, tức là bên trong thân ca phương thức rỗng. Các biến thành viên đưc khởi tạo các giá trị tầm thường như  thuc tính nguyên có giá trị là 0 và chuỗi thì khởi tạo rỗng,..Bng 4.2 sau tóm tắt các giá trị mc đnh

được gán cho các kiểu dữ liệu cơ bản.

 

 

Kidữ liệu

Giá trị mặc định

int, long, byte,…

0

bool

false

char

\0’ (null)

enum

0

reference

null

Bảng 4.2: Giá trị mặc đnh của kiểu dữ liệu cơ bản.

Thường thường, khi muốn định nghĩa một phương thc khởi dựng riêng ta phcuncấp các tham số để hàm khi dựng có thể khởi to các giá trị khác ngoài giá trị mặc định cho các đối tượng. Qualại ví dụ 4.1 giả sử ta muốn truyn thời gian hiện hành: năm, tháng, ngày,…để đối tượng có ý nghĩa hơn.

Để định nghĩa một bộ khởi dựng riênta phải khai báo một phươnthcó tên giống như tên

lớp đã khai báo. Phương thc khi dng không có giá trị trả về và đưc khai báo là public. Nếu phương thc khi dng này được truyn tham số thì phi khai báo danh ch tham số giống như khai báo với bất kỳ phương thức nào trong một lp. Ví dụ 4.3 đưc viết li từ ví dụ 4.1 và thêm một bộ khi dựng riêng, phương phc khi dựnnày sẽ nhận một tham số là một đối tượng kiểu DateTime do C# cung cấp.

 

 

Ví dụ 4.3: Định nghĩa một bộ khi dng.

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

 

using System;

 

public class ThoiGian

 

{

 

public void ThoiGianHienHanh()

 

{

 

Console.WriteLine(“ Thoi gian hien hanla : {0}/{1}/{2}

 

{3}:{4}:{5}”, Ngay, Thang, Nam, Gio, Phut, Giay);

 

}

 

// Hàm khởi dựng

 

public ThoiGian( System.DateTime dt )

 

{

 

Nam = dt.Year; Thang = dt.Month; Ngay = dt.Day;

Gio = dt.Hour; Phut = dt.Minute; Giay = dt.Second;

}

 

// Biến thành viên private int Nam;

int Thang; int Ngay; int Gio;

int Phut;

 

int Giay;

 

}

 

public class Tester

 

{

 

static void Main()

 

{

 

System.DateTime  currentTime = System.DateTime.Now; ThoiGian t = new ThoiGian( currentTime ); t.ThoiGianHienHanh();

}

 

}

 

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

 

 

 

 

Kết quả:

 

Thoi gian hien hanh la: 5/6/2002  9:10:20

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Trong ví dụ trên phương thc khởi dng lấmột đối tượng DateTime và khtạo tcả các biến thành vn dựa trêgiá trị của đối tưng này. Khi phương thức này thc hiện xong, một đối  tượng  ThoiGiađưc  tạo  ra  và  c  biến  của  đối  tượng  cũng  đã  đưc  khởi  tạo.  Hàm ThoiGianHienHanh đưc gọi trong hàm Main(sẽ hiển thị giá trị thời gian lúc đối tượng đưtạo ra.

Chúng ta thử bỏ một số lệnh khởi to trong phương thức khởi dng và cho thc hichươntrình lại thì c biến không được khtạo sẽ có giá trị mặc định là 0, do là biến nguyên. Một biến thành viên kiểu nguyêsẽ đưc thiết lập giá trị là 0 nếchúng ta không gán nó trong phương thức khởi dựng. Chú ý rng kiểu dữ liệu giá trị không thể không được khtạo, nếu ta không khi tạo thì trình bn dịcsẽ cung cp các giá trị mặc định theo bảng 4.2.

Ngoài ra trong chương trình 4.3 trên có sử dụng đối tượng clDateTime, lớp DateTime này đưc cuncấp bởi thư viện System, lớp này cũng cung cấp các biến thành viêpublinhưYearMonthDayHourMinute, và Second tương tự như lớp ThoiGiacủa chúng ta. Thêm vào đó là lớp nàcó đưa ra một phương thc thành viên tĩnh tên là Now, phươnthNosẽ trả về một tham chiếđến một thể hiện của một đối tượnDateTime đưc khto

với thgian hiện hành. Theo như trên khi lệnh :

System.DataTime  currentTime = System.DateTime.Now();

đưthực hiện thì phươnthc tĩnh Now() sẽ tạo ra một đối tưng DateTimtrên bộ nhớ heap và trả về một tham chiếu và tham chiếu này đưgán cho biến đối tưng currentTime.

Sau khi đối tưng currentTime đưtạo thì câlệnh tiếp thesẽ thc hiện việc truyn đối tượng currentTimcho phương thc khởi dựng để tạo một đối tượng ThoiGian:

ThoiGian t = new ThoiGian( currentTime );

Bên trong phương thức khi dựnnày tham số dt sẽ thachiếu đến đối tưng DateTime là đối tượng vừa tạo mà currentTimng tham chiếu. Nói cách khác lúc này tham số dt và currentTime ng tham chiếu đến một đối tượng DateTime trong bộ nhớ. Nhờ vy phương thức  khởi  dng  ThoiGiacó  thể  truy  cp  đưc  c  biến  thành  vpublic  của  đối  tưng DateTimđưtạo trong  hàm Main().

Có một sự nhấn mạnh ở đâlà đối tưnDateTime đưtruycho bộ dựng ThoiGiachính là đối tượng đã đưtạo trong hàm Main và là kiu dữ  liệu tham chiếu. Do vy khi thc hiện truyn tham số là một kiểu  dữ liệu tham  chiếu  thì  con  trỏ  đưánh  xạ qua chứ hoàtoàn không có một đối tưng nào được sachép li.

 

 

Khởi tạo biến thành viên

 

Các biến thành vcó thể đưc khởi tạtrc tiếp khi khai bátrong quá trình khởi tạo, thay vì phải thực hin việc khởi tạo các biến trong bộ khởi dựng. Để thc hiện việc khởi to này rđơn giản là việc sử dụng phép gán giá trị cho một biến:

 

privatint Giay = 30;     // Khi tạo

Việc khởi tạo biến thành viên sẽ rất có ý nghĩa, vì khi xác định giá trị khởi tạo như vthì biến sẽ không nhận giá trị mặc đnh mà trình biên dch cung cp. Khi đó nếu các biến này không đưc gán li trong các phương thc khởi dựng thì nó sẽ có giá trị mà ta đã khởi to. Ví dụ 4.4 minh ha việc khởi to biến thành viên khi khai báo. Trong ví dụ này sẽ có hai bộ dng ngoài bộ dựng mặc đnh mà trình biên dịccung cp, một bộ dựng thực hin việc gán

giá trị cho tất cả các biến thành viên, còn bộ dựng thứ hai thì cũng tươntự nhưnsẽ không gán giá trị cho biến Giay.

Ví dụ 4.4: Minh hoạ sử dụng khởi tạo biến thành viên.

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

 

public class ThoiGian

 

{

 

public void ThoiGianHienHanh()

 

{

 

System.DateTime now = System.DateTime.Now; System.Console.WriteLine(\n Hien tai: \t {0}/{1}/{2}  {3}:{4}:{5}”,

now.Day, now.Month, now.Yearnow.Hour, now.Minute, now.Second); System.Console.WriteLine(“ Thoi Gian:\t {0}/{1}/{2}  {3}:{4}:{5}”,

Ngay, Thang, Nam, Gio, Phut, Giay);

 

}

 

public ThoiGian( System.DateTime dt)

 

{

 

Nam = dt.Year; Thang = dt.Month; Ngay = dt.Day;

Gio = dt.Hour; Phut = dt.Minute;

Giay = dt.Second;     // có gán chbiến thành viên Giay

 

}

 

public ThoiGian(int Yearint Month, int Date, int Hourint Minute)

 

{

 

Nam = Year; Thang = Month; Ngay = Date;

Gio = Hour;

 

Phut = Minute;

 

}

 

privatint Nam; privatint Thang; privatint Ngay; privatint Gio; privatint Phut;

privatint Giay = 30 ; // biến đưkhi tạo.

 

}

 

public class Tester

 

{

 

static void Main()

 

{

 

System.DateTime currentTime = System.DateTime.Now; ThoiGian t1 = new ThoiGian( currentTim); t1.ThoiGianHienHanh();

ThoiGian t2 = new ThoiGian(2001,7,3,10,5);

 

t2.ThoiGianHienHanh();

 

}

 

}

 

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Kết quả:

Hien tai:

5/6/2002

10:15:5

Thoi Gian:

5/6/2002

10:15:5

 

 

Hien tai:

5/6/2002

10:15:5

Thoi Gian:

3/7/2001

10:5:30

—-—-—-—-—-—-—-—-—-—-—-—-—-—-

Nếu không khởi tạo giá trị của biến thành viên thì bộ khởi dựnmặc định sẽ khtạo giá tr là

mặc đnh cho biến thành viên có kiu nguyên. Tuy nhiên, trontrưng hp này biến thành viên Giay đưc khởi tạo giá trị 30:

Giay = 30;       // Khởi to

Trong trường hợp bộ khởi tạo thứ hai khôntruyn giá trị cho biến Giay nên biến này vly giá trị mà ta đã khởi tạo ban đlà 30:

ThoiGian t2 = new ThoiGian(2001, 7, 3, 10, 5);

 

t2.ThoiGianHienHanh();

 

Ng


Lượt xem : 264

Integrations
Users

Share Profile

Anyone at KeenThemes can view
Anyone with link can edit

Give Award

Anyone at KeenThemes can view
Anyone with link can edit

Report User

Let us know why you’re reporing this person
Don't worry, your report is completely anonymous; the person you're
reporting will not be informed that you've submitted it