iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Software Development

如果可以,我想用30天的時間打造一間抵霸閣系列 第 22

[Day22]抵霸閣-今晚要不要來一點static

  • 分享至 

  • xImage
  •  

還記得第一次在高中用C#寫Hello word時就有看到static

namespace Hi
{
    public class Program
    {
        static void Main(string[] args) //一開始初始化console專案就出現的static
        {
            Console.WriteLine("Hello word"); 
        }
    }
}

當時老師也沒多做解釋
就讓他一直存在程式碼中
直到大學修C語言相關的課程才知道他跟記憶體的關係
就代表說如果宣告一個成員是static
那麼這個成員就會固定占用那塊記憶體
如果你又宣告了和static同名的成員
那麼這兩個成員就會變成生命共同體
改一個就等於兩個都改
所以要特別小心
不過如果只是個小專案而且也只需要一些功能的話
那的確可以不用了解static也能開發
(就像即使資訊科畢業也不一定要會修電腦
但如果你真的很有興趣 或是擁有打破砂鍋了解到底的精神
那多學也沒什麼壞處)

而靜態方法static的好處就是不需要new便可以使用
但非靜態方法就需要靠new來實體化才能用
所以我就想說幹嘛不都用static就好
還可以用較少的程式碼完成相同的功能
問題就在於剛剛提到的因為static內的成員是存在同樣的記憶體內
(像是淺拷貝的概念 若修改複製出來的東西 原本被複製的也會改變)
還有容易造成memory leak
因為即使static完全不會被執行到
他還是占著茅坑不拉屎
讓記憶體的可用資源越來越少(除非你記憶體大到不需要管)
而且也很難做單元測試(因為需要一次只針對單一功能驗證 但static會互相影響[耦合])
所以老話一句:看你需要什麼,就找到最合適的方法來用
沒有一定怎麼樣比較好


上一篇
[Day21]抵霸閣-列舉型別的基本介紹
下一篇
[Day23]抵霸閣-關於C#的存取修飾詞那回事
系列文
如果可以,我想用30天的時間打造一間抵霸閣30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言