PDA

View Full Version : Khi nào dùng static ?, công dụng của nó ?



sisap
29-03-2004, 21:23
Hic, các anh cho em hỏi câu này hơn bị ngu, hichic

public static string strMyName;

public string strMyName;

2 cái này khác nhau chổ nào ?, khi nào dùng static, công dụng của nó ?

Hic, mong các anh chỉ giáo

White Rose
29-03-2004, 23:25
nếu khôgn có static, mỗi khi bạn instantiate một object thì một phần bộ nhớ lại được dành ra cho biến này (riêng biệt với các object).
Nếu có thì chỉ có một phần bộ nhớ duy nhất được dành ra, cho dù bạn tạo bao nhiêu object đi chăng nữa. Các object truy xuất đến static member tại vùng nhớ này (chia sẻ nhau)

phduy
30-03-2004, 00:13
Sorry vi khong dung dc tieng Viet truoc.

static dc dung khi trong class cua ban co mot thanh phan ( thuoc tinh, hoac ham ) la bat bien voi moi doi tuong cua lop do ( bat bien ca doi voi su thay doi gia tri cua cac thuoc tinh ). Khi do ban dung khai bao static de tiet kiem bo nho.

static con mot cong dung khac ( day cung chinh la mot dac tinh cua static ). cac ham hay bien static chi co the truy xuat duoc qua class, khong the goi tu bat ki mot doi tuong nao cua lop. Cac ham static chi co the thao tac voi cac bien, thuoc tinh static.
Constructor va Destructor cua class la ngoai le, cac ham binh thuong khac khong truy xuat duoc bien static.

VD :

class A
{
public static int nCount = 0;
public int nObjectRef = 0;

public static void IncreaseCount()
{
nCount++; // right
nObjectRef++; // wrong
}

public int NumberOfInstance()
{
return nCount; // wrong
}
}

class B
{
public void Do()
{
Console.WriteLine(A.nCount); // right
A.IncreaseCount(); // right

A aa = new A();
Console.WriteLine(aa.nCount); // wrong
aa.IncreaseCount(); // wrong
}
}

Neu ban biet ve Patterns, static duoc su dung rat nhieu trong cac Pattern do. Dien hinh nhat la Singleton Pattern. Doi khi ban muon tao ra mot class de chua mot so ham, bien nao do, nhung lai khong muon bat ki mot doi tuong nao cua lop duoc tao ra. Hay khai bao tat ca cac thuoc tinh, ham la static, khai bao Constructor la private hoac protected.

Best regards

HunterLeader
01-04-2004, 22:06
bổ xung:
Static được dùng khi muốn truy cập trực tiếp 1 class chứ ko phải đối tượng
VD: Math.Pi

dtt_vn
01-04-2004, 22:40
Khi có static trong một class thì bất cứ thành phần nào cũng được dành một và chỉ một vùng bộ nhớ. nếu không có static thì chỉ khi nào bạn khởi tạo lại mới có thể sử dụng được các thành phần trong class, ngược lại đối với static. tuy nhiên, static hạn chế bạn sử dụng nội dung của các biến khác không là static trong một class

hoahong212
07-01-2009, 23:06
cho em hỏi một câu về mạng căn bản xíu,mong cac cao thu giup dỡ:Máy A:192.168.10.108 truy xuất đồng thời đến webserver có đ/c 10.5.6.7 và mail server 11.6.7.8.Hãy viết tổ hợp IP: Port Source & IP: Port Destination của các gói tin xuất phát từ A đến các server trên.

br0™
08-01-2009, 07:02
Mình không rõ lắm nhưng khi biến khai báo theo kiểu static có thể dùng chung cho cả 1 ứng dụng. Có thể truy xuất từ form này qua form khác.

namrom
08-01-2009, 10:42
Hic, các anh cho em hỏi câu này hơn bị ngu, hichic

public static string strMyName;

public string strMyName;

2 cái này khác nhau chổ nào ?, khi nào dùng static, công dụng của nó ?

Hic, mong các anh chỉ giáo

static thì ko cần khởi tạo object mà vẫn có thể gọi đến nó

Anh_tn
08-01-2009, 11:39
cứ khi nào nói đến từ tĩnh là có static!
biến tĩnh...,mảng tĩnh...

duongdragonxxx
09-01-2009, 01:02
va tình .............. tĩnh =))

sinhviencongnghe
09-01-2009, 15:51
Lý thuyết quá
- static được khởi tạo khi chương trình chạy, nên người ta thường dùng nó để gán giá trị mặc định và hay truy xuất đến. Public static thì có giá trị toàn cục (hồi xưa gọi là Global Variable)
- Do được tạo ngay khi CT chạy nên khi truy xuất object có từ khóa static thì không cần new object đó lên. VD: Math.PI (trong đó Math là lớp static, khi sử dụng không cần new như các class bình thường)
- Không nên lạm dụng quá nhiều static vì sẽ ảnh hưởng đến tốc độ CT (do tự động khởi tạo lúc chạy nên chiếm vùng nhớ), mà chỉ sử dụng nếu các biến đó hay object đó thường xuyên được truy xuất.

Thân chào