public class MyClass{ public void SomeMethodint firstParam, float secondParam{ C onsole.W riteL ine“C ác tham số nhận đư ợ c:{0},{1}”,... T ạo các đối tư ợ ngC ác kiểu dữ liệu có sẳn của
Trang 1N gôn ngữ C #
T rần V ăn T èo tvteo@agu.edu.vn
Trang 2C hư ơ ng 2: L ớ p và Đ ối tư ợ ng
n Đ ịnh nghĩa lớ p.
n T ạo các đối tư ợ ng.
n S ử dụng các thành viên static.
n H uỷ các đối tư ợ ng (destructor).
n T ruyền thông số cho hàm
n N ạp chồng (overload) và constructor.
n C ác thuộc tính (property).
n C ác vùng m ục tin read C ác vùng m ục tin read only only.
n C uộc sống bên trong các đối tư ợ ng.
Trang 31 Đ ịnh nghĩa lớ p
n Cú pháp:
[attributes][access-modifiers] class identifier [:base-class]
[class-body]
n identifier: tên class
n basebase class: lớ p cơ sở đ ư ợ c class: lớ p cơ sở đư ợ c
kế thừ a
n classclass b o d y : th ân củ a lớ p , body: thân của lớ p,
nằm trong dấu ngoặc
nhọn {}, các thành viên
đư ợ c định nghĩa trong
đây
Trang 4static void Main() {
CDate d = new CDate();
d.CurDate();
}
Trang 5T ừ khoá chỉ dẫn truy xuất
n public : có thể truy cập từ bên ngoài.
n private: chỉ truy cập bên trong.
n protected: bên trong và thêm các lớ p kế thừ a.
n Ngoài ra còn enternal và protected internal
Trang 6C ác tham số của hàm
n C ác hàm có nhiều tham số cũng đư ợ c
n T rong thân hàm , các tham số hoạt động như các biến cục bộ
public class MyClass{
public void SomeMethod(int firstParam, float secondParam){
C onsole.W riteL ine(“C ác tham số nhận đư ợ c:{0},{1}”,
Trang 72 T ạo các đối tư ợ ng
C ác kiểu dữ liệu có sẳn của C # (int, long… ) thuộc kiểu trị (value type) nên đư ợ c lư u trong bộ nhớ của stack.C òn nhữ ng đối tư ợ ng thì thuộc kiểu qui chiếu (reference type) nên đư ợ c lư u trong bộ nhớ của heap
và để sử dụng chúng phải dùng từ khóa
và để sử dụng chúng phải dùng từ khóa new new
V í dụ: C D ate d = new C D ate();
Trang 8H àm khở i dự ng (constructor)
n Đ ư ợ c triệu gọi bất cứ lúc nào bạn cho thể hiện m ột
đối tư ợ ng.
n C onstructor phải đư ợ c định nghĩa
•• H oặc định nghĩa theo ý bạn.H oặc định nghĩa theo ý bạn
•• H oặc trình biên dịch sẽ tự định nghĩa và đối tư ợ ng đư ợ c tạo H oặc trình biên dịch sẽ tự định nghĩa và đối tư ợ ng đư ợ c tạo
ra không làm gì cả, các biến thành viên sẽ đư ợ c khở i gán
m ặc định: số nguyên
m ặc định: số nguyên zero, chuổi zero, chuổi rổng, bool rổng, bool false.false
n M ột hàm constructor:
•• C ó tên cùng tên lớ p.C ó tên cùng tên lớ p
•• K hông có trị trả về, có các tham số ( nếu cần )K hông có trị trả về, có các tham số ( nếu cần )
•• T hư ờ ng có m odifier là public.T hư ờ ng có m odifier là public
Trang 9dt DisplayCurDate();
} }
Trang 10n N ếu trong constructor có
khở i gán lại các biến này
Trang 11this Year = d.Year;
this Month = d.Month;
this Day = d.Day;
} }
… … … CDate ddd = new CDate( dd );
Trang 12•• L à thông số cho m ột hàm L à thông số cho m ột hàm
•• D ùng trong indexer để xác D ùng trong indexer để xác
định m ột phần tử trong
m ảng (trình bày chư ơ ng
sau)
private int hour;//thành viên
public void SomeMethod
(int hour){
this.hour = hour;
}
public void FirstMethod
(OtherClass otherObj){
otherObj.SomeMethod( this );}
Trang 13S ử dụng các thành viên static
n C ác thuộc tính hoặc các hàm của m ột lớ p hoặc là C ác thuộc tính hoặc các hàm của m ột lớ p hoặc là instance instance
member
member hoặc là hoặc là static member static member
•• Instance m em ber đư ợ c gắn liền vớ i các kiểu dữ liệu Instance m em ber đư ợ c gắn liền vớ i các kiểu dữ liệu
•• S tatic m em ber đư ợ c xem là thành phần của lớ p S tatic m em ber đư ợ c xem là thành phần của lớ p
•• T ruy xuất đến static m em ber thì không cần phải khai báo lớ p T ruy xuất đến static m em ber thì không cần phải khai báo lớ p.
thay vì viết: B utton btn = new B utton(); btn.S om eM ethod();
n C # không có hàm (biến) toàn cục (global), thay vào đó là hàm (biến) static
n T riệu gọi các hàm T riệu gọi các hàm static static
n S ử dụng hàm S ử dụng hàm static constructor static constructor
n S ử dụng S ử dụng private constructor private constructor.
n S ử dụng các m ục tin (field) static
Trang 14T riệu gọi các hàm static
n Hàm Hàm static static không có qui không có qui
chiếu
chiếu this this vì nó không vì nó không
có m ột thể hiện
((instance instance) nào. ) nào.
n Các hàm Các hàm static static không không
thể trự c tiếp truy xuất
public class Tester
{ static void Main() {
MyClass mc = new MyClass(); mc.SomeMethod();
}
Trang 15S ử dụng hàm static constructor
n Đ ư ợ c triệu gọi trư ớ c
khi bất cứ thể hiện nào
của lớ p đư ợ c tạo ra.
N am e = “N am e”;
}}
Trang 16S ử dụng
n T rong C # không có hàm (hằng) toàn cục (global) D o đó ta có thể tạo m ột lớ p tiện ích chứ a các thành viên static
n Đ ể ngăn ngừ a việc tạo bất kỳ thể hiện nào Đ ể ngăn ngừ a việc tạo bất kỳ thể hiện nào tạo m ột tạo m ột
constructor không tham số và khai báo
constructor không tham số và khai báo private private Vì không có Vì không có constructor public, nên không thể tạo m ột thể hiện nào trên lớ p
public class MyConstant{
public static byte MaxQuality = 50;
public static byte MaxAge = 25;
public static byte MinAge = 16;
private MyConstant(){}
}
Trang 17H uỷ các đối tư ợ ng
C # cung cấp dịch vụ thu gom rác gọi là “garbage collection”, viết tắt là G C
n Destructor
n Finalize
Trang 18T rao tham số cho hàm
n M ặc định tham số truyền vào là tham trị.
n T ừ khoá T ừ khoá ref ref cho biết biến truyền vào kiểu cho biết biến truyền vào kiểu
tham chiếu.
n T ừ khoá T ừ khoá out out vớ i trư ờ ng hợ p m ột biến ref chư a vớ i trư ờ ng hợ p m ột biến ref chư a khở i gán giá trị ban đầu.
n T ừ khoá T ừ khoá params params cho phép m ột hàm chấp nhận cho phép m ột hàm chấp nhận
m ột số lư ợ ng tham số không cố định.
Trang 19int Year=2006, Month=3, Day=26;
public void ValueDate
( int y, int m, int d) {
y = Year;m = Month; d = Day;
}
public void RefDate
( ref int y, ref int m, ref int d) {
y = Year; m = Month; d = Day;
dt ValueDate( Y , M , D ); // Year = ? , Month = ? , Day = ?
dt ValueDate( ref Y, ref M, ref
D );
} }
Trang 20T rao tham số out
using System;
public class CDate
{
int Year=2006, Month=3, Day=26;
public void SetDate
( int y, out int m, ref int d) {
y = Year; m = Month; d = Day;
int Y = 2006; // tham tri
int M; // khong khoi gan
int D = 1; // tham chieu
CDate dt = new CDate( );
dt SetDate(Y, out M, ref D );
} }
Trang 21public CDate( int y, int m, int d ){
… … … }
public CDate( CDate dt ){
… … … }
}
Trang 22n P hần lớ n các F ield thư ờ ng m ang
tính private D o đó ngư ờ i ta đư a
ra các P roperty dư ớ i dạng các
hàm để truy xuất các F ield này
n M ục tiêu:
•• C ung cấp m ột giao diện đơ n C ung cấp m ột giao diện đơ n
giản cho ngư ờ i dùng
•• C he giấu đư ợ c các thông tin.C he giấu đư ợ c các thông tin
public class CDate{
private int Year, Month, Day;
public int Year{
get { return Year; }
set { Year = value ; } }
public int Month{
get { return Month; }
set { Month = value ; } }
public int Day{
get { return Day; }
set { Day = value ; } }
Trang 23public static int Year;
public static int Month;
public static int Day;
}
public readonly static int Year;
public readonly static int Month;
public readonly static int Day;
Trang 24Q & A