Tài liệu Bài giảng Cơ sở lập trình - Chương 3 Xây dựng lớp, đối tượng: 4/10/2012
1
Chương 3
Xây dựng lớp, đối tượng
ThS. Phạm Thanh An
Khoa Công nghệ thông tin
Đại học Ngân hàng Tp. Hồ Chí Minh
Nội dung trình bày
 Định nghĩa lớp.
 Tạo đối tượng.
 Sử dụng các thành viên static.
 Hủy đối tượng.
 Truyền tham số.
 Nạp chồng phương thức.
 Đóng gói dữ liệu với thuộc tính.
 Thuộc tính chỉ đọc.
Phát triển hệ thống OOP
 Chương trình được tạo thành bởi các đối 
tượng.
 Mỗi đối tượng đảm nhận thực hiện một tập các 
nhiệm vụ liên quan. 
 Trong phát triển hệ thống, đối tượng là sự mô 
tả một cái gì đó mà chúng ta muốn thao tác 
trong hệ thống: là thực thể vật lý hoặc thực thể 
khái niệm 
 Đối tượng có các thuộc tính (property) và hành 
vi (behaviors)
4/10/2012
2
Đối tượng
 Sinh viên:
 Thuộc tính: 
 Tên
 Mã số sinh viên 
 Ngày sinh
 Quê quán
 Hành vi
 Đăng ký môn học
 Chọn chuyên ngành
 Hủy một môn học
Đối tượng (tt)
 Đối tượng có thể biểu diễn cho người, vị trí, 
vật, một bảng dữ liệu cần xử lý
 Xe hơi...
                
              
                                            
                                
            
 
            
                 28 trang
28 trang | 
Chia sẻ: honghanh66 | Lượt xem: 1025 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng Cơ sở lập trình - Chương 3 Xây dựng lớp, đối tượng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
4/10/2012
1
Chương 3
Xây dựng lớp, đối tượng
ThS. Phạm Thanh An
Khoa Công nghệ thông tin
Đại học Ngân hàng Tp. Hồ Chí Minh
Nội dung trình bày
 Định nghĩa lớp.
 Tạo đối tượng.
 Sử dụng các thành viên static.
 Hủy đối tượng.
 Truyền tham số.
 Nạp chồng phương thức.
 Đóng gói dữ liệu với thuộc tính.
 Thuộc tính chỉ đọc.
Phát triển hệ thống OOP
 Chương trình được tạo thành bởi các đối 
tượng.
 Mỗi đối tượng đảm nhận thực hiện một tập các 
nhiệm vụ liên quan. 
 Trong phát triển hệ thống, đối tượng là sự mô 
tả một cái gì đó mà chúng ta muốn thao tác 
trong hệ thống: là thực thể vật lý hoặc thực thể 
khái niệm 
 Đối tượng có các thuộc tính (property) và hành 
vi (behaviors)
4/10/2012
2
Đối tượng
 Sinh viên:
 Thuộc tính: 
 Tên
 Mã số sinh viên 
 Ngày sinh
 Quê quán
 Hành vi
 Đăng ký môn học
 Chọn chuyên ngành
 Hủy một môn học
Đối tượng (tt)
 Đối tượng có thể biểu diễn cho người, vị trí, 
vật, một bảng dữ liệu cần xử lý
 Xe hơi : là một thực thể vật lý
 Tài khoản khách hàng: thực thể khái niệm
 Khoa: thực thể khái niệm
 Các đối tượng tương tác bằng cách gửi thống
điệp (sending message)
 sending message = calling method
Lớp
 Lớp là bản mẫu hay một kiểu chung cho 
tất cả những đối tượng có những đặc 
trưng giống nhau 
 có các thuộc tính và hành vi giống nhau
 Trong lập trình hướng đối tượng, lớp 
được xem là đồng nhất với kiểu dữ liệu 
trừu tượng
 Một lớp có thể tạo ra một số không giới 
hạn các đối tượng
4/10/2012
3
Lớp (tt)
Tên
Địa chỉ
Điện thoại
Thanh
Quận 1
123-456
Bình
Quận 2
221-4728
Lan
Quận 9
117-2321
Khách hàng
Tên
Địa chỉ
Điện thoai
Lớp với đối tượng
Lớp Đối tượng
 Là khuôn mẫu
 Định nghĩa các thuộc
tính và hành động của
một đối tượng
 Được tạo ra khi thiết
kế
 Là một thể hiện của một
lớp, đối tượng tồn tại
trong bộ nhớ và có thời
gian tồn tại hữu hạn
(finite lifespan)
245
Định nghĩa lớp
 Sử dụng từ khoá class. 
[Bổ từ truy cập] class [: Lớp cơ sở]
{
 // Các thành phần dữ 
liệu
 // Hàm 
}
 Ghi chú: trong C# phần kết thúc của lớp không 
có dấu “;” như khai báo lớp trong ngôn ngữ C++
4/10/2012
4
Ví dụ về định nghĩa lớp
public class hocsinh
{
private string hoten;
public int lop ;
public void lenlop();
{
lop = lop +1;
}
} // kết thúc khai báo lớp
Ví dụ: Lớp tài khoản
public class taikhoan
{
private float sodutk ;
public void naptien(float sotien)
{ sodutk = sodutk + sotien; }
public bool ruttien(float sotien)
{ if ( sodutk < sotien) return false ;
else { sodutk = sodutk - tienrut; return true ; }
}
public float laysodu()
{ return sodutk ; }
}
Bổ từ truy cập (Access modifiers)
Bổ từ truy 
cập Giới hạn truy cập
public Không giới hạn. Những thành phần public có thể được dùng 
bởi bất cứ các phương thức của lớp bất kỳ.
private Thành viên trong một lớp A được đánh dấu là private thì chỉ 
có thể được truy cập bởi các phương thức của lớp A.
protected Thành viên trong lớp A được đánh dấu là protected thì chỉ có thể được truy cập các phương thức bên trong lớp A và những 
phương thức của những lớp dẫn xuất từ lớp A .
4/10/2012
5
Bổ từ truy cập (Access modifiers)
Bổ từ truy 
cập Giới hạn truy cập
internal Thành viên trong lớp A được đánh dấu là internal thì được truy cập bởi những phương thức của bất cứ lớp nào trong 
cùng khối hợp ngữ với A.
protected 
internal
Thành viên trong lớp A được đánh dấu là protected 
internal được truy cập bởi các phương thức của lớp A, các 
phương thức của lớp dẫn xuất của A, và bất cứ lớp nào 
trong cùng khối hợp ngữ của A.
Phương thức
 Là các hàm khai báo bên trong lớp
 Có trả về giá trị (int, float, string, object, vv)
 Hoặc không trả về giá trị (void)
 Một phương thức cài đặt hành vi của đối 
tượng
 Khai báo phương thức
 (d/s tham số)
{
 ; // thân phương thức
}
Tham số của phương thức
 Có thể có 0 hoặc nhiều tham số. 
 Mỗi tham số phải khai báo kèm với kiểu dữ 
liệu
 Bên trong thân của phương thức, 
 Các tham số này được xem như những biến cục 
bộ
 Giống như biến ta khai báo bên trong phương thức 
và khởi tạo giá trị bằng giá trị của tham số truyền 
vào
4/10/2012
6
Tạo đối tượng
 Sử dụng từ khóa new
Đối tượng = new tênlớp()
 Ví dụ:
 taikhoan tk1 = new taikhoan();
 hoặc taikhoan tk1 ; tk1 = new taikhoan();
 Truy cập đến thành phần
 .
Ví dụ: lớp thời gian
using System;
public class ThoiGian
{
int Nam;
int Thang;
int Ngay; // Các thành viên private
int Gio;
int Phut;
int Giay;
public void ThoiGianHienHanh()
{
Console.WriteLine(“Hien thi thoi gian hien hanh”);
}
}
Ví dụ: lớp thời gian
public class Tester
{
static void Main()
{
ThoiGian t = new ThoiGian();
t.ThoiGianHienHanh();
}
}
4/10/2012
7
Phương thức thiết lập (constructor)
 Là một phương thức đặc biệt trong một lớp
 Được gọi mỗi khi đối tượng được tạo
 Không bắt buộc phải có, nhưng hữu ích cho 
việc khởi tạo các thành phần của đối tượng
 Có cùng tên với tên lớp, được khai báo là 
public, không trả về giá trị (không sử dụng 
void)
 Khi đó tạo đối tượng: 
đối tượng = new tênlớp(các tham số)
Ví dụ: Phương thức thiết lập
using System;
public class Thang
{
private int days;
public Thang(int songay)
{
days = songay;
}
static void Main()
{
Thang thang1 =new Thang(31);
Thang thang4 = new Thang(30);
Console.WriteLine (Thang1.days);
}
}
Ví dụ: lớp Rectangle
4/10/2012
8
Phương thức thiết lập (tt)
 Nếu không định nghĩa phương thức thiết 
lập, trình biên dịch sẽ cung cấp một 
phương thức thiết lập mặc định.
 Phương thức thiết lập mặc định được 
tạo ra cho một đối tượng sẽ không thực 
hiện bất cứ hành động nào
 Các thành viên lớp được khởi tạo các 
giá trị mặc định.
Giá trị mặc định kiểu dữ liệu cơ bản
Ví dụ:
class MyClass
{
string myMsg;
public MyClass (string msg)
{
myMsg = msg;
}
}
class MyApp
{
MyClass c;
public Main (string[] args)
{
c = new MyClass(); // Lỗi
}
}
4/10/2012
9
Ví dụ: lớp Time
using System; 
using System.Collections.Generic;
using System.Text;
namespace DeclaringConstructor 
{ 
public class Time
{
int Year; 
int Month;
int Date; // private member variables
int Hour; 
int Minute; 
int Second; 
Ví dụ: lớp Time (tt)
public void DisplayCurrentTime( ) 
{ 
System.Console.WriteLine( "{0}/{1}/{2} 
{3}:{4}:{5}", Month, Date, Year, Hour, Minute, 
Second ); 
} 
// phương thức thiết lập 
public Time( System.DateTime dt )
{ Year = dt.Year; Month = dt.Month; Date = 
dt.Day; Hour = dt.Hour; Minute = dt.Minute; 
Second = dt.Second; 
}
} // end class Time
Ví dụ: lớp Time (tt)
public class Kiemtra
{ 
static void Main( )
{
System.DateTime currentTime =System.DateTime.Now; 
Time t = new Time( currentTime );
t.DisplayCurrentTime( );
} 
}
} // end namespace
4/10/2012
10
Khởi tạo biến thành viên
 Các biến thành viên có thể được khởi 
tạo trực tiếp khi khai báo trong quá trình 
khởi tạo
private int Giay = 30; // Khởi tạo
Nạp chồng phương thức thiết lập
 Chúng ta có thể định nghĩa nhiều 
phương thức thiết lập trong một lớp
 Với điều kiện
 Danh sách các tham số phải khác nhau
 Hoặc kiểu dữ liệu các các tham số phải 
khác nhau.
Ví dụ
public class taikhoan
{
private float sodutk ;
private float gioihanrut;
public taikhoan( int sd)
{ 
sodutk = sd;
}
public taikhoan (int sd, int lm)
{
sodutk = sd;
gioihanrut = lm;
}
4/10/2012
11
Ví dụ
public void naptien(float sotiennap)
{
sodutk = sodutk + sotiennap;
}
public bool ruttien(float sotienrut)
{
if (sotienrut <=sodutk)
{ sodutk = sodutk - sotienrut; return 
true;}
else return false ;
}
}
Ví dụ
taikhoan tk1 = new taikhoan(50);
taikhoan tk2 = new taikhoan(50,10);
Ví dụ : Nạp chồng constructor
4/10/2012
12
Ví dụ:
public class DaysInYear
{
private int days;
public DaysInYear()
{
days = 365;
}
public DaysInYear(int day)
{
days = day;
}
public DaysInYear(String dayOne)
{
days =Convert.ToInt32(dayOne);
}
public void setDay(int newDays)
{
days = newDays;
}
}
Phương thức thiết lập sao chép
 Để thực hiện việc tạo một đối tượng mới bằng cách 
sao chép tất cả các biến từ một đối tượng đã có và 
cùng một kiểu dữ liệu.
public ThoiGian( ThoiGian tg)
{
Nam = tg.Nam;
Thang = tg.Thang;
Ngay = tg.Ngay;
Gio = tg.Gio;
Phut = tg.Phut;
Giay = tg.Giay;
}
Phương thức thiết lập sao chép (tt)
 Để sao chép từ một đối tượng đã hiện 
hữu t1 là đối tượng của lớp ThoiGian 
như sau:
 ThoiGian t2 = new ThoiGian( t1 );
 Lúc đó, đối tượng t2 được tạo ra như bản 
sao của đối tượng t1.
4/10/2012
13
Từ khóa this
 Từ khóa this được dùng để tham chiếu đến 
thể hiện hiện hành của một đối tượng. 
 Được sử dụng để giải quyết sự xung đột về 
tên
 Mỗi phương thức có thể tham chiếu đến 
những phương thức khác và các biến thành 
viên thông qua tham chiếu this này
 Không thể sử dụng từ khóa this với các biến 
và phương thức tĩnh.
Từ khóa this (tt)
 Sử dụng khi các biến thành viên bị che lấp bởi 
tham số đưa vào, như trường hợp sau
public void SetYear( int Nam)
{
this.Nam = Nam;
}
 Trong phương thức SetYear() có tham số 
(Nam) cùng tên với thành phần của lớp.
Từ khóa this (tt)
 Sử dụng tham chiếu this để gọi một phương thức nạp 
chồng từ một phương thiết lập khác :
class myClass { 
public myClass(int i)
{
} 
public myClass( ) : this(42)
{ 
}
} // end class
4/10/2012
14
Từ khóa this (tt)
 Sử dụng this để gọi tường minh các 
thành phần và phương thức trong lớp
public void MyMethod(int y)
{
int x = 0; 
x = 7; // gán biến cục bộ
y = 8; // gán cho tham số
this.z = 5; // gán cho thành phần lớp
this.Draw( ); // gọi phương thức thành phần
} 
Các thành viên tĩnh (static member)
 Những thuộc tính và phương thức trong một 
lớp có thể là những thành viên thể hiện 
(instance members) hay những thành viên tĩnh 
(static members). 
 Những thành viên thể hiện hay thành viên của đối 
tượng, liên quan đến 1 thể hiện của lớp (một đối 
tượng). 
 Trong khi thành viên tĩnh được xem như một phần 
của lớp
Các thành viên tĩnh (tt)
 Để truy cập đến thành viên tĩnh của một 
lớp: .
 Sử dụng từ khóa “static” để khai báo 
một thuộc tính hay một phương thức với 
thuộc về lớp
4/10/2012
15
Ví dụ: Phương thức tĩnh
Các thành viên tĩnh (tt)
 Chỉ có một bản sao của các thành phần tĩnh 
trong bộ nhớ, được chia sẽ bởi các thể hiển 
của lớp.
 Ghi chú:
 Trong C# không cho phép truy cập đến các thành 
viên tĩnh thông qua một thể hiện, 
 Nếu chúng ta cố làm điều đó thì trình biên dịch 
C# sẽ báo lỗi
Ví dụ: thành viên tĩnh
public class Counter
{
private Counter() { }
public static int currentCount;
public static int IncrementCount()
{
return ++currentCount;
}
}
4/10/2012
16
Ví dụ: thành viên tĩnh (tt)
class TestCounter
{
static void Main()
{
Counter.currentCount = 100;
Counter.IncrementCount();
System.Console.WriteLine("New count: {0}", 
Counter.currentCount);
}
}
Các thành viên tĩnh (tt)
 Các thuộc tính tĩnh rất hữu ích khi chúng 
ta muôn lưu trữ các trạng thái liên quan 
đến tất cả thể hiện của lớp
 Phương thức tĩnh có tác dụng khi hành 
vi là chung cho của lớp chứ không phải 
một thể hiện cụ thể nào của lớp.
Ví dụ sử dụng các thuộc tính tĩnh
using System;
public class Cat
{
private static int instance =0;
public Cat()
{
instance++;
}
public static void HowManyCats()
{
Console.WriteLine(“{0} cats”, instance);
}
}
4/10/2012
17
Ví dụ sử dụng các thuộc tính tĩnh
public class Tester
{
static void Main()
{
Cat.HowManyCats();
Cat mun = new Cat();
Cat.HowManyCats();
Cat muop = new Cat();
Cat miu = new Cat();
Cat.HowManyCats();
}
}
Kết quả:
0 cats
1 cats
3 cats
Gọi một phương thức tĩnh
 Main() là một phương thức tĩnh. 
 Các phương thức tĩnh không cần có tham 
chiếu this và một thể hiện nào tham chiếu tới.
 Các phương thức tĩnh không thể truy cập trực 
tiếp đến các thành phần không tĩnh (nonstatic) 
 Ví dụ với Main() để gọi một phương thức không tĩnh 
(nonstatic), phải tạo ra một thể hiện lớp
Ví dụ:
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, var2 );
}
}
4/10/2012
18
Phương thức thiết lập tĩnh
 Nếu một lớp khai báo một phương thức thiết lập 
tĩnh (static constructor), thì phương thức thiết lập 
tĩnh này sẽ được thực hiện trước bất cứ thể hiện 
nào của lớp được tạo ra.
 Ghi chú: 
 Không thể điều khiển chính xác khi nào thì phương 
thức thiết lập tĩnh này được thực hiện. 
 Nó sẽ được thực hiện sau khi chương trình chạy và 
trước bất kì biến đối tượng nào được tạo ra.
Ví dụ: Sử dụng hàm thiết lập tĩnh
class A
{
public static int x;
static A ( )
{
x = 0;
}
public void Increase()
{
x = x+1;
}
}
Sử dụng phương thức 
thiết lập tĩnh để khởi đầu 
các biến thành phần tĩnh
Lưu ý về phương thức thiết lập tĩnh
 1 lớp có thể định nghĩa duy nhất một phương 
thức thiết lập tĩnh
 Phương thức thiết lập tĩnh thưc hiện duy nhất 
1 lần cho dù chúng ta có tao ra một số bất kỳ 
các đối tượng
 Phương thức thiết lập tĩnh không nhận bổ từ 
truy cập (private, public,..) và không nhận bất 
kỳ tham số nào.
 Phương thức thiết lập tĩnh được thực hiện 
trước bất kỳ phương thức thiết lập mức thể 
hiện.
4/10/2012
19
Phương thức thiết lập private
 Được sử dụng khi một lớp chỉ có các 
thành phần tĩnh, và đối tượng của lớp 
không cần tạo ra
Phương thức thiết lập private (tt)
 C# không có phương thức toàn cục và hằng số toàn 
cục (đều phải khai báo trong 1 lớp). 
 Sử dụng phương thức thiết lập private,khi cần tạo ra 
những lớp tiện ích nhỏ chỉ để chứa các phương thức 
tĩnh (lớp Math, Console)
 Lưu ý: 
 Nếu một lớp có phương thức thiết lập private và 
không có phương thức thiết lập public, thì tất cả 
các lớp khác (ngoại trừ lớp lồng) không được phép 
tạo ra thể hiện của lớp này.
Phương thức hủy (Destructors)
 Không nhận tham số
 Khai báo như phương thức thiết lập, có thêm ‘~’ vào 
trước
 Được gọi bởi Garbage Collector trong C#
 Garbage Collector giải phóng bộ nhớ bằng cách hủy 
những đối tượng không dùng nữa hoặc không tham 
chiếu đến nữa
 Cú pháp:
~()
{
 ;
}
4/10/2012
20
Phương thức hủy (Destructors)
 Lưu ý:
 Có duy nhất 1 phương thức hủy trong 1 lớp
 Không thể gọi tường minh phương thức hủy
 Không nhận bất kỳ tham số nào
 Khổng thể nạp chồng hay kế thừa
 Không nhân các bổ từ truy cập
Ví dụ: phương thức hủy
Truyền tham số
 Mặc định, các kiểu giá trị thì sẽ được 
truyền giá trị vào cho phương thức. 
 C# đưa ra khả năng cho phép ta truyền 
các tham số kiểu giá trị dưới hình thức là 
tham chiếu, sử dụng các bổ từ:
 ref : Bắt buộc phải khởi tạo giá trị ban đầu 
cho tham số truyền vào
 out: Không cần phải khởi tạo giá trị ban 
đầu cho tham số truyền vào.
4/10/2012
21
Ví dụ: Truyền tham số
Ví dụ: với bổ từ ref
Ví dụ: với bổ từ out
4/10/2012
22
Từ khóa params
using System; 
using System.Collections.Generic;
using System.Text;
namespace UsingParams 
{ 
public class Tester 
{ 
static void Main( )
{
Tester t = new Tester( );
t.DisplayVals(5,6,7,8);
int [ ] mang = new int[5] {1,2,3,4,5};
t.DisplayVals(mang);
}
Từ khóa params (tt)
public void DisplayVals(params int[] intVals)
{ 
foreach (int i in intVals)
{ 
Console.WriteLine("DisplayVals {0}",i);
}
}
} // kết thúc lớp
} // kết thúc namespcae
Quá tải phương thức (Overloading)
 Sử dụng cùng một tên cho các phương 
thức
 Có hai cách quá tải phương tức
 Chỉ ra số các tham số khác nhau
 Chỉ ra kiểu của các tham số khác nhau
4/10/2012
23
Quá tải phương thức
using System;
public class Area
{
private int areaVal;
public void AreaCal(int radius)
{
areaVal = (22/7)* radius*radius;
}
public void AreaCal(int length, int breadth)
{
areaVal = length*breadth;
}
public void AreaCal(int length, int breadth, int height)
{
areaVal = length*breadth*height;
}
}
Quá tải phương thức
... 
public void Add(int number1, int number2)
{
sum = number1 + number2;
}
public void Add(string value1, string value2)
{
int sum;
sum = Int32.Parse(value1) + Int32.Parse(value2);
Console.WriteLine ("Sum is {0}",sum);
Console.WriteLine ("Strings are converted to integers to add”); 
}
... 
Đóng gói dữ liệu với thuộc tính
 C# cung cấp khả năng bảo vệ các trường dữ 
liệu trong một lớp, tránh truy cập trực tiếp 
bằng cách đọc và ghi tới các trường này thông 
qua Properties
 Properties được thiết kế nhắm vào hai mục 
đích: 
 Cung cấp một giao diện đơn cho phép truy cập các 
biến thành viên.
 Tuy nhiên cách thức thực thi truy cập giống như 
phương thức trong đó các dữ liệu được che dấu, 
đảm bảo cho yêu cầu thiết kế hướng đối tượng
4/10/2012
24
Đóng gói dữ liệu với thuộc tính
public class Employee
{
private string fullName;
public string GetFullName()
{
return fullName;
}
public void SetFullName (string s)
{
fullName = s;
}
}
Sử dụng các phương 
thức để truy cấp đến 
trường private, 
phương pháp truyền 
thống
Đóng gói dữ liệu với thuộc tính
 có thể là private, public, 
protected hay internal, có thể 
bất kỳ 1 kiểu trong C#. 
{
get
{
}
set
{
}
} 
Đóng gói dữ liệu với thuộc tính
public class Employee
{
private string fullName;
...
// Property for fullName
public string Name
{
get { return fullName; }
set { fullName = value;}
}
}
Định nghĩa Property để 
cho các chương trình 
client truy cập 
static void Main()
{
Employee p = new 
Employee();
p.Name = “Tom”;
Console.WriteLine (p.Name);
}
4/10/2012
25
Đóng gói dữ liệu với thuộc tính
 Các kiểu thuộc tính
Read/Write
Read-Only
Write-Only
Read/Write Property
 Tồn tại cả hai khối get và set
Read-Only Property
 Chỉ tồn tại khối get
public class Employee
{
private string fullName;
...
// read-only Property for fullName
public string Name
{
get { return fullName; }
}
}
4/10/2012
26
Write-Only Property
 Chỉ tồn tại khối set
public class Employee
{
private string fullName;
...
// write-only Property for fullName
public string Name
{
set { fullName = value; }
}
}
Các trường chỉ đọc
using System; 
namespace StaticPublicConstants 
{ public class RightNow 
{ // public member variables 
public static int Year; 
public static int Month; 
public static int Date; 
public static int Hour; 
public static int Minute; 
public static int Second; 
static RightNow( )
{ System.DateTime dt = System.DateTime.Now; 
Year = dt.Year; Month = dt.Month; 
Date = dt.Day; Hour = dt.Hour;
Minute = dt.Minute; Second = dt.Second; 
}
}
Các trường chỉ đọc
public class Tester
{ static void Main( ) 
{
Console.WriteLine( "This year: {0}", 
RightNow.Year.ToString( ) );
RightNow.Year = 2009;
Console.WriteLine( "This year: {0}", 
RightNow.Year.ToString( ) );
} // kết thúc main
} // kết thúc lớp Tester 
} // kết thúc namespace
Output:
This year: 2008 
This year: 2009 
4/10/2012
27
Các trường chỉ đọc
 Để cho các chương trình client được phép đọc 
và tránh thay đổi giá trị thuộc tính year, chúng 
ta khai báo như sau
public static readonly int Year; // thuộc tính chỉ 
đọc
 Lúc này nếu ai đó thay đổi 
RightNow.Year = 2009; // lỗi
Cấu trúc lớp nhìn từ trong
Cấu trúc lớp từ phía người dùng
4/10/2012
28
Tóm tắt chương
 Đối tượng
 Lớp
 Phương thức thiết lập, quá tải
 Thuộc tính
 Thành phần Static
 Truyền tham số
Q&A
Thank you all for your attention and patient !
            Các file đính kèm theo tài liệu này:
 chapter_3_2148.pdf chapter_3_2148.pdf