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方法,你就是一個類中私有成員,我就是這個類例項化的一個物件。
關於宣告與定義先簡單大致的說在這兒,後面會繼續深入挖掘有關類的性質,感謝您的閱讀,您的建議與評論是我完善自我的無尚動力^_^……