1:靜態方法不可訪問類成員非靜態成員。
2:在類中靜態變數在載入的是分配一個記憶體空間,所有的變數類共用一個內容,如果任何一個對象修改了靜態變數的值,所有變數輸出的值都會改變:例如代碼:
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Person p = new Person("胡明豪");
label1.Text=p.GetName();
Person p1 = new Person("胡明豪2");
label2.Text = p1.GetName();//顯示為胡明豪2
label3.Text = p.GetName();//胡明豪2
}
}
}
3. 靜態方法並不存在常駐記憶體,效能高等特點。方法跟屬性不一樣,方法在調用時都需要從代碼地區擷取一份本方法的代碼去執行,在這一點上靜態和非靜態方法沒有本質區別。在AppDomain載入程式集時,代碼被放到特定的唯讀地區,不存在靜態非靜態之分。
4. 靜態方法不能訪問執行個體的方法,屬性等,但執行個體方法則無此限制。同時需注意在多線程編程中,任何方法(包括靜態和非靜態)對本方法外定義的屬性,變數等的訪問和修改需謹慎,因為這可能導致安全執行緒問題。
5. 靜態方法不能被繼承,重寫,因為static修飾符不能跟virtual, abstract, override等共存,因此在一些物件導向的設計中要謹慎使用,它在一定程度上的確會破壞物件導向設計OO特性,諸如繼承,多態等。 但對於一些功能相對獨立,不需要跟其它對象有很多調用,又不需要經常修改的方法,可以使用靜態方法,靜態方法在調用時相對簡單明了。
6:在不需要更改類成員變數是使用靜態方法。
7:一直以為靜態方法在多使用者並發下會是排隊等待,一個個執行,原來是並發執行的,絕對不會排隊等待。