2013年2月19日 星期二

小山的 C# 教學-第14課-物件導向基礎 Class

本課簡介

此課開始切入物件導向的部分
而建立物件的基礎就是 class
所以這課將會教大家如何建立 class 與物件

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!
另外從本課開始就不放字幕了,詳情請看第13課



重點提示

1. 物件導向就是要透過物件之間的互動來完成工作

2. 想要建立物件就必須要先定義 class

3. class 主要分成「property 屬性」、「method 方法」兩個部分

4. 「property 屬性」代表 class 的性質,「method 方法」代表 class 的行為與能力

5. method 的格式為「public output型別 method名稱(input型別與名稱)」

6. 想要存取物件,就必須使用 class 的變數

7. 一開始宣告 class 的變數後不會產生任何物件,必須要用「new class()」才能夠產生物件

8. 只要在變數後面加上小數點,就可以存取物件的 property 跟 method 了
例如:「s.StudentID」、「s.Say()」

練習

1. 在 class Student 內增加一個名為「Walk」的 method,他會輸出「某某學生正在走路」的資訊

2. 建立另一個叫做「Car」的 class,裡面記錄著顏色與速度。並且加入一個名為「Run」的 method,呼叫他的話會輸出「甚麼顏色的車正在以某個速度前進中」

23 則留言:

  1. ><" 沒有放字幕 .....覺得看不懂了!! 本身不瞭解 加上看不懂 漸漸開始 難上加難~

    回覆刪除
  2. 小山老師:
    DataRow不是類別嗎?為什麼他不用new?
    另外
    可以順便指導一下DataRow與NewRow()的用法嗎?
    謝謝!

    private void btnInsert_Click(object sender, EventArgs e)
    {
    string str1 = this.textBox1.Text;
    string str2 = this.textBox2.Text;

    DataRow dr = ds.Tables["商品"].NewRow();
    dr["品名"] = str1;
    dr["價格"] = str2;

    }

    回覆刪除
  3. 小山老師好:
    我在書上看到下列一行有關xml的程式,DataColumn dc= ds.Table["學生"].Column["學號"];
    我的問題是 DataColumn是一各類別,使用時為什麼不需要new呢?
    有什麼方式可以判斷,使用類別不需要new,直接拿來用?
    謝謝老師!

    回覆刪除
  4. 小山老師 你好:
    請教老師,在第14課內 我所輸入的student和name兩個字底下都有紅色的曲線 而且按綠色三角箭頭 都出現錯誤 希望老師能夠指導 謝謝!

    回覆刪除
    回覆
    1. 這樣你可能要把錯誤訊息告訴我我才能幫你判斷狀況
      錯誤訊息在你將滑鼠遊標移到紅色的位置就會出現

      刪除
  5. 不好意思
    想請問我如果要用visual c++ 建立class 它沒有類別的選項讓我加ㄝ
    那我要從哪邊建立呢

    回覆刪除
    回覆
    1. Visual C++ 並不是用來寫 C# 的哦!
      你可以考慮遵循這個影片下載 Visual Studio Express
      https://www.youtube.com/watch?v=PqK4Sn_f3yc

      刪除
  6. 小山老師,你好
    這篇,我聽兩天還是不懂其中的一段話。
    piblic string Say()
    {
    retura " 我叫 " +name + " 我是 " + Grade + " 年級的學生 "
    {
    第一個問題是:string代表著Say
    Say最後要回傳什麼東西回去(不懂要回傳回去哪裡?)

    第二個問題:最後Say會吐string回去(不懂吐回去哪裡?)

    第三個問題:retura的時候,會retura一個string回去(不懂retura一個string回去哪裡?)

    這段定義method的行為,我聽的霧煞煞。
    小山老師能再教一下嗎? 謝謝

    回覆刪除
    回覆
    1. 這邊的「吐」、「回傳」、「return」都是指同一件事情

      我們今天定義了一個 method
      就代表給予了這個 class 一個可以執行的行為

      我們在外面建立出一個物件之後
      呼叫了 say() 就會使這個物件執行 say 這個動作
      執行完之後,say() 會給我們一個執行的結果
      就是「回傳的東西」

      因此你問的回傳到哪裡
      其實就是傳給當初呼叫 say() 的程式碼

      如果我們今天執行
      string a = s.say()
      你可以想成 s.say() 的位置會被替換成它執行的結果
      因此可能會變成
      string a = "我叫 小山 我是 3 年級的學生"
      也就是最後的結果會存入 a

      今天我們在影片中是寫成 MessageBox.Show(s.say())
      因此若將 s.say() 的位置替換成它執行的結果
      就會變成
      MessageBox.Show("我叫 小山 我是 3 年級的學生")
      然後訊息視窗就會將我們的字串顯示出來

      刪除
  7. 謝謝你!! 剛好在學這段 真的淺顯易懂!!

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

    回覆刪除
  9. 原本一直搞不懂,為什麼要用NEW,今天看了這個影片,總算瞭解!

    回覆刪除
  10. 感謝小山~我又更進步了~

    回覆刪除
  11. 感謝小山大~ CLASS很好玩

    回覆刪除
  12. 由0自學 android studio 到寫了千幾行code的app放上google play,我也不懂用物件導向
    現在得到小山大師的指點,終於打通任督二脈 ! ! !
    感謝小山大師 m(_ _)m

    回覆刪除
  13. 請問練習題有答案嗎?
    謝謝🙏

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

      刪除
    2. private void button1_Click(object sender, EventArgs e)
      {
      Student a = new Student();

      a.Name = "louise";
      MessageBox.Show(a.Walk());

      }

      private void button2_Click(object sender, EventArgs e)
      {
      Car b = new Car();

      b.Color = "紅色";
      b.Speed = 20;

      MessageBox.Show(b.Run());

      }

      刪除
  14. 請問為什麼我在car.cs中設定speed為int,可是在form1.cs中a.speed會出現(無法將類型"string"隱合轉換成"int")的錯誤
    class car
    {
    public string color;
    public int speed;
    public string run()
    {
    return color + "的車子正在以時速" + speed + "公里的速度前進中";
    }
    }
    --------------------------------------------------------------------------------
    private void button1_Click(object sender, EventArgs e)
    {
    car a = new car();
    a.color = "黑色";
    a.speed = "20"; //出現錯誤
    MessageBox.Show(a.run());
    }

    回覆刪除
    回覆
    1. speed後面不用加"" 因為是int 只有string 要加
      我猜啦我也沒學到後面

      刪除
  15. 老師你好,照著這一堂課的影片操作,但不知道是否為版本關係(目前為visaul studio 2022最新版),
    在namespace這邊有個問題, public string Name, Name 的下方出現綠色波浪線,滑鼠靠近時有顯示
    "不可為Null的欄位'Name'必需包含非'Name'值,考慮將欄位宣告為可為Null ",在麻煩老師幫我看看,謝謝,以及如何改善。

    回覆刪除