談談c#中的static

來源:互聯網
上載者:User

static關鍵字大家肯定是用的很多了,說起來大家也都知道,這有什麼好談的?

可是回想起以前的一些事情,不免叫我心中......

事情起因,一個項目中的一些類中全部都是方法,但是被設計成了非靜態類了。於是我為了說服同事將這些類設計成靜態,下了好大的力度。等同事明白過來以後,我已疲憊不堪。

不知道您是否存在以下觀點?

  1. static是從面向過程到物件導向的遺留產物,以往開發都是面向過程的,所以很多使用了靜態類、靜態方法,到了物件導向以後,這個關鍵字被保留下來了。因此物件導向開發中最好不用或少用static關鍵字。
  2. 無論是靜態類還是非靜態類,效果都是一樣的,沒什麼區別。
  3. 如果你非要讓我使用靜態類,那麼這樣做的意義在哪裡?
  4. 如果我把非靜態類該為靜態類,那麼會不會有什麼問題?

下面針對以上的一些觀點,筆者闡述下自己的理解,如果哪裡有寫的不對的地方,還請指出。

  1. static關鍵字的確是面向過程開發的時代就有的關鍵字,但是並不代表是物件導向開發中就應該盡量避免static關鍵字。
  2. 靜態類跟非靜態類效果肯定是不一樣的,區別肯定是有的。
  3. 根據筆者的經驗,static類一般用於與狀態無關的類。那麼,什麼是與狀態無關的類?我的理解是當一個類中沒有屬性,只有方法的的時候,就可以認為這個類是與狀態無關的類。回想非靜態類執行個體化一個對象,目的在什麼地方?目的就是通過這個執行個體化的對象來儲存類的狀態。
    不是嗎?例如
    A a = new A();
    a.Name = "Kevin";
    a.Sex = "男";
    ......
    通過我們執行個體化的對象a,類的狀態被對象a保持住了。
    如果我們的類沒有屬性,全是方法,那麼,有必要為了調用類中的方法,先執行個體化一個對象出來嗎?
    因此,筆者建議,在做類的設計的時候,如果類是與狀態無關的類,建議將其設計為static類。
    至於說這樣做的意義:首先,省略了構造一個對象的效能損耗,雖然可以忽略不計。其次,對程式員比較友好,調用類的方法更加的方便。
  4. 只要一個類是與狀態類無關的類,那麼將其設計成靜態類是沒有問題的。
    對於以上的一些觀點,純屬個人經驗之談。如果您有不同的觀點,歡迎共同交流。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.