類作為面向對象的靈魂,在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方法,你就是一個類中私有成員,我就是這個類別實例化的一個物件。
以上就是C#學習日記13---類(Class)的聲明與定義的內容,更多相關內容請關注PHP中文網(www.php.cn)!