CHƯƠNG 3: Lớp và đối tượng
Nội dung chính
Định nghĩa lớp
Tạo đối tượng
Sử dụng các thành viên tĩnh
Truyền tham số
Hàm dựng và nạp chồng phương thức
Đóng gói dữ liệu với property
1. Định nghĩa lớp
Lớp trong C# cho phép người lập trình tự định
nghĩa các kiểu dữ liệu phức tạp (user-defined
types) và được sử dụng tương tự như kiểu dữ
liệu có sẵn (built-in data types).
Lớp thường được sử dụng để định nghĩa các
vấn đề trừu tượng như: ngày tháng, vector …
Lớp cho phép tách rời phần cài đặt
(implementation) và phần giao diện (interface).
1.Định nghĩa lớp (tt)
Một lớp có chứa dữ liệu (member data) và hàm (member function).
Class
data1
{
Console.WriteLine("stub for DisplayCurrentTime");
}
// các biến private
private int Year; int Month; int Date;
public int Hour,Minute, Second;
}
public class Tester
{
static void Main()
{
Time t = new Time();
t.DisplayCurrentTime();
}
}
Điều khiển truy nhập
Class
private
public
data1
data2
functiond()
functiona()
functionb()
functionc()
Phần được khai báo với từ khóa
private chỉ được truy nhập bởi các
hàm thành phần của cùng class
Phần được khai báo với từ khóa
public có thể được truy nhập tại
Console.ReadLine();
}
}
}
2.Tạo đối tượng
Ví dụ:
Chương trình nhập chiều dài, chiều rộng của hình chữ nhật và xuất ra
diện tích, chu vi của hình chữ nhật.
using System;
namespace LopDoiTuongHCN
{
class HCN
{
protected float Dai, Rong;
public float ChuVi()
{
return (Dai + Rong )*2;
}
public float DienTich()
{
return Dai* Rong;
}
public void Nhap()
{
Console.WriteLine("Nhap chieu dai: ");
Dai = float.Parse(Console.ReadLine());
Console.WriteLine("Nhap chieu rong: ");
Rong = float.Parse(Console.ReadLine());
}
}
public class Tester
{
static void Main( )
{
int howManyPeople = 5;
float pi = 3.14f;
MyClass mc = new MyClass( );
mc.SomeMethod(howManyPeople, pi);
}
}
Trong ví dụ trên phương thức Main() là tĩnh và phương thức SomeMethod() không là tĩnh.
3.Sử dụng các trường tĩnh (tt)
public void HowManyCats1()
{
Console.WriteLine("{0}
cats adopted", instances);
}
private static int instances
= 0;
public static int instances1
= 0;
}
using System;
public class Cat
{
public Cat()
{
instances++;
Trong C#, ta có thể truyền tham số cho phương thức theo kiểu tham chiếu hoặc tham trị
Truyền bằng tham chiếu
Một hàm chỉ có thể trả về một giá trị. Trong trường hợp muốn nhận về nhiều kết
quả, ta sử dụng chính các tham số truyền cho hàm như các tham số có đầu ra
(chứa trị trả về). Ta gọi tham số truyền theo kiểu này là tham chiếu.
Ví dụ
Trị trả về trong tham số
public class Time
{
// một phương thức public
public void DisplayCurrentTime()
{
System.Console.WriteLine("{0}/{1}/{2} {3}:{4}:{5}“, Month, Date, Year, Hour, Minute,
Second);
}
public int GetHour( )
{
return Hour;
}
public void GetTime(ref int h, ref int m, ref int s)
{
h = Hour;
m = Minute;
s = Second;
}
Ví dụ (tt)
// hàm dựng
public Time(System.DateTime dt)
{
}
Ví dụ: Đối tượng làm tham số
object d2
soluong
dongia
thanhtien
object d1
soluong
dongia
thanhtien
d2.add_solg(d1,65);
day
d1.day
Hàm thành phần của d2 truy
nhập trực tiếp tới dữ liệu
soluong
của nó
Hàm thành phần của d2 truy
nhập tới dữ liệu
soluong
của
đối tượng d1
Truyền tham số đầu ra (out parameter)
Mặc định, C# quy định tất các biến phải được gán giá trị trước khi sử
dụng, vì vậy,trong ví dụ trên, nếu chúng ta không khởi tạo các biến
theHour, theMinute bằng giá trị 0 thì trình biên dịch sẽ thông báo lỗi.
Từ khóa out cho phép ta sử dụng tham chiếu mà không cần phải khởi gán
giá trị đầu. Trong ví dụ trên, ta có thể sửa phương thức GetTime thành:
public void GetTime(out int h, out int m, out int s)
Hour = dt.Hour;
Minute = dt.Minute;
Second = dt.Second;
}
// private member variables
int Year;
int Month;
int Date;
int Hour;
int Minute;
int Second;
}
public class Tester
{
static void Main( )
{
System.DateTime currentTime =
System.DateTime.Now;
Time t = new Time(currentTime);
t.DisplayCurrentTime( );
}
}
Kết quả:
11/16/2000 16:21:40
Hàm tạo sao chép
Hàm tạo sao chép khởi tạo đối tượng dựa trên một đối tượng
khác thuộc cùng lớp.
Mỗi lớp có một hàm tạo sao chép mặc định – có một tham số là