C#學習日記13---類(Class)的聲明與定義

        類作爲面向對象的靈魂,在C#中有着相當廣泛和深入的應用,對類的深度掌握自然是我們學習C#重要的一個環節.有關類的意義上一篇  C#學習日記12---引用類型 中已經給出了,這裏就不再重複了.說到 類 就不得不說下與之息息相關的內容----對象.

類與對象:

           類:  從具有相同屬性的事物當中抽象出來的概念,一般用來描述同類個體的集合。

    對象: 從類當中具體化的一個個體。(比如人類就是一個類, 張三 就是人類中的一個對象)

    屬性:用來描述對象特徵的。   (在類裏面,是類的數據成員^_^)

    方法:   說明對象具有的能力。   (在類裏面,是類的數據成員^_^,在C/C++中它叫函數,以後要改口啦)

    事件:  具有觸發能力的函數.        

                (與方法不同的是,事件是被動,由外部事物發出,受動者是對象; 而方法是由對象主動發出的動作,是類的數據成員)

 

類的定義:

    類的定義是以關鍵字 class 開始,後跟類的名稱。類的主體,包含在一對花括號內。

訪問修飾符 class  類名

   {

        訪問修飾符數據成員

   }

 

舉個例子:

 public class Student

      {

            private string name;

            private int age;

     }

  訪問類裏面的數據成員方式與 Struct類型 一樣,您要使用(.)點運算符(鏈接了對象的名稱和成員的名稱),對於訪問修飾符,這裏對 private、public、internal 稍微說一下(以後我會細說噠):

   private:  私有訪問。只限於本類成員訪問,子類,實例(對象)都不能訪問 (換句話說供類自身調用)。

   public:   公有訪問。不受任何限制,所有類都可訪問。

   internal:  同一個程序集中的所有類均可訪問,可以想象成Public 的其中一個程序集集合。

 

    如果沒有指定訪問修飾符,相關的訪問權限就會使用默認權限,類的默認權限是 internal,  成員的默認權限是private; 所以當我們以後出現了有關訪問權限問題的時候,記得看看是不是沒指定訪問修飾符或者使用不適當。

 

創建對象:

         也可以說是對類進行對象實例化,需要採用 new 語句。拿上面定義好的類舉例子 Student  stu = new Student();  此時會調用Student類當中的 構造方法(函數,通俗的理解爲初始化函數吧,以後在說構造函數與析構函數),如果沒有默認將數據成員賦值爲0;

下面就寫個列子:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{   //定義的一個類,類名叫People
    public class People
    { 
      //全部指定爲公有成員
        public string name;    
        public char sex;        
        public uint age;
    
    }

    class Program
    {
       
        static void Main(string[] args)
        {
            People person = new People();        //實例化一個類,對象名叫 person
            Console.WriteLine("輸入姓名: ");
            person.name = Console.ReadLine();   //  全部輕鬆訪問,沒有壓力 
            Console.WriteLine("請輸入性別:");
            person.sex = Console.ReadKey().KeyChar;    //char 類型轉換
            Console.WriteLine("\n請輸入年齡:");
            person.age = uint.Parse(Console.ReadLine());   //強制類型轉換
            Console.WriteLine("您的姓名是:{0}\t您的性別是:{1}\t您的年齡是:{2}",person.name,person.sex,person.age);

        }
    }
}


運行下:

 

 看完上面寫的代碼,發現 這與 Struct類型 除了名字不同外有何區別?? 在上面的程序中確實沒有區別(所有成員都是Public),看下面這個:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Test
{   //定義的一個類,類名叫People
    public class People
    { 
      //全部指定私有成員
        private string name;    
        private char sex;        
        private uint age;

        //定義public 方法作用是輸入與輸出
        public void input()
        {
            Console.WriteLine("輸入姓名: ");
            name = Console.ReadLine();   
            Console.WriteLine("請輸入性別:");
            sex = Console.ReadKey().KeyChar;    //char 類型轉換
            Console.WriteLine("\n請輸入年齡:");
            age = uint.Parse(Console.ReadLine());   //強制類型轉換
        
        }
        public void output()
        {
            Console.WriteLine("您的姓名是:{0}\t您的性別是:{1}\t您的年齡是:{2}",name, sex,age);
        
        }
    
    }

    class Program
    {
       
        static void Main(string[] args)
        {
            People person = new People();        //實例化一個類,對象名叫 person

            person.input();         //通過調用 public 方法訪問privat 成員並賦值

            person.output();    //此時無法使用直接使用 Console.WriteLine(person.name)輸出,訪問權限不夠

        }
    }
}

    運行過於上面一模一樣,在class類中我們可以定義方法,(上面的input與output是兩個方法)而在Struct 結構體中不能定義方法,而且我們將People類中的屬性指定爲private 私有成員,外界對象person無法直接訪問,只能通過People中指定的Public方法訪問。舉個例子吧:  當我倆打電話的時候,我倆並沒有面對面的交流,而是通過 手機 這個媒介相互交換信息,此時 手機就可以看作你的一個public方法,你就是一個類中私有成員,我就是這個類實例化的一個對象。

 

 

 

 

 

   關於聲明與定義先簡單大致的說在這兒,後面會繼續深入挖掘有關類的性質,感謝您的閱讀,您的建議與評論是我完善自我的無尚動力^_^……


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章