C#中靜態方法和靜態變數的使用問題

來源:互聯網
上載者:User

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:一直以為靜態方法在多使用者並發下會是排隊等待,一個個執行,原來是並發執行的,絕對不會排隊等待。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.