2013年7月7日 星期日

小山的 C# 教學-第19課-static 修飾字

本課簡介

如果不想要建立物件,卻又想使用 class 的功能該怎麼辦呢?
那你就會需要 static 的幫忙

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!


重點提示

1. 使用了 static 修飾過的變數、method,不需要建立物件就可以直接透過 class 名稱使用

2. static 修飾過的變數是所有同 class 的物件共用的

3. static class 不可以用來建立物件


補充

static 變數在記憶體內的狀態

        每一個物件的變數與其相關的資料都會存在物件被分配的記憶體內。那本課提到了 static 變數是所有物件共用的,這個時候可能就會不禁問說:那 static 變數放哪裡?答案是,放在 class 本身所屬的記憶體區塊裡。每個程式啟動的時候,都會分配給每個 class 一塊記憶體使用,裡面放的內容包含 class 的 static 變數以及 class 的程式碼。當然這個部分的實作細節,會隨著不同版本的 .NET Framework 而有差異。

相關資訊連結

微軟官方對於 static 的介紹

http://msdn.microsoft.com/zh-tw/library/98f28cdx%28v=vs.80%29.aspx

10 則留言:

  1. 請問什麼情況下我會考慮使用static,什麼情況下我會透過new
    可以給我e-mail嗎?
    可以透過mail跟你請教問題嗎?
    謝謝!
    pos1623@gmail.com

    回覆刪除
  2. 請問一下,我想用Math.log 為什麼,我Math.後面出來的都是呼叫到class ,怎都沒有你那一大串的數學函式?

    回覆刪除
    回覆
    1. 恩... 我可能需要多一點資訊才有辦法判斷哦~
      可以貼上整頁的程式碼嗎?

      刪除
  3. 小山老師,你好

    請教一個問題

    影片中,為什麼要在class Studdent裡面輸入
    public int Score
    public int PassScope

    public bool isPass()
    {
    一組的if else
    }

    怎麼沒有把這些放在class Math裡面

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 這樣也可以----

      在Student.cs中

      public bool isPass(int score)
      {
      Score = score;
      if (Score >= passScore)
      {
      return true; // 及格
      }
      else
      {
      return false; // 不及格
      }


      }

      在Form1.cs中

      if (s2.isPass(10) == true)
      {
      MessageBox.Show("過關");
      }
      else
      {
      MessageBox.Show("掰掰");
      }

      這樣可以達成~~

      刪除
  4. 小山老師
    以上的教學我都OK
    但想試作顯示2個以上的成績結果
    請問該怎麼作呢??
    是假設若有20個student
    那判斷式不就寫到暈倒了

    回覆刪除
    回覆
    1. 關於你的情況,若想要處理大量同樣類型的資料
      可以使用第22課所教的「陣列」,再配合之前講過的 for 迴圈
      你可以參考看看

      刪除
  5. 小山老師,可以講解一下 class 和 struct 的區別和用法嗎?

    回覆刪除
  6. 作者已經移除這則留言。

    回覆刪除