參考文獻
蜜酒廳通訊社 游戲部 石中居士
對象(object):有狀態、行為和身份的東西。
狀態(state):表示物體特征的信息,可以用來跟蹤對象的狀態。
屬性(properties):因為編程人員需要把控對象的狀態,所以要對其進行訪問。通過屬性可以訪問對象的狀態。
行為(behavior):編程人員要求對象能夠采取的行動以及對對象操作的行動。
方法(methods):調用對象的方法,以指定對象的行為。
身份(identity):用來區分對象的標志。
我們不需要看到對象的內部來使用對象,只需要使用屬性和方法來命令它。
封裝(Encapsulation):將相關字段和行為組合成一個對象的過程
類(class):描述類中對象的字段、屬性和方法,作為新對象的模版。
實例化(instantiation):我們使用實例化從類創建一個新對象。
統一建模語言(UML,Unified Modeling Language):用這一語言,顯示為問題解決方案設計的類和對象的結構。我們將把類名的第一個字母大寫,并以對象名的小寫字母開頭,這樣就很容易從名稱中分辨出是類還是對象。
關于字段,我們以小寫字母開始每個字段名。每個變量后面都有一個數據類型(值類型或引用類型—類)。當我們在C#中聲明變量時,數據類型在變量名之前,但是在UML中順序相反。
我們以大寫字母開始每個屬性名。
類成員(class members):類的字段、屬性和方法被稱為類成員。
函數(functions):在Unity文檔中函數和方法是一個意思。
編寫一個Message類
構造函數只有一個string參數。而我們希望對象持有的message就是這個參數。
1.如何創建message對象:
// ClassName objectName = new ClassName(arguments);// ClassName : 對象objectName的類名// 對象名由arguments——構造函數的實參創建
我們想輸出一個消息“Hi!”,則:
Message hiMessage = new Message("Hi!");
// 運行程序時,hiMessage作為新對象創建,對象生成時,message的內部設置為字符串“Hi”。
創建多行消息,則:
Message mutiMessage = new Message("Hello,world\n" +
"I'm a Viking.\n" +
"Oh,Damn.");轉義字符串(escape sequence):\n(換行)、\t(制表符)、\r(回車)、\\(反斜線轉義)、\"(雙引)
輸出上面創建的多行消息,則要調用對象的Print方法:
mutiMessage.Print();
// 我們不需要向方法傳遞任何參數,因為我們要打印的消息的字符串已經包含在對象本身中;// 這就是為什么我們在調用構造函數時提供消息字符串的原因。// 要為對象調用這種方法,我們從對象的名稱開始;這告訴C#應該使用哪個對象。// 然后輸入句點,然后是方法名。這告訴c#在給定對象中使用哪個方法。// 最后,我們把方法需要的參數放在開括號和閉括號之間。// 因為Print方法不需要任何參數,所以我們沒有在括號中放入任何東西(但是我們仍然需要包含括號!)。
我們也可以分成三步,第一步,我們聲明變量;第二步,創建對象;第三步,輸出。
Message mutiMessage;
mutiMessage = new Message("Hello,world\n" +
"I'm a Viking.\n" +
"Oh,Damn.");
mutiMessage.Print();
在聲明對象的同時創建對象更好一些。
應用程序類代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PrintMessage {
/// /// Prints a message to the console/// class Program {
/// /// Prints the message/// /// command-line arguments static void Main(string[] args) {
Message mutiMessage = new Message("Hello,world\n" +
"I'm a Viking.\n" +
"Oh,Damn.");
mutiMessage.Print();
Console.WriteLine();
}
}
}
調用方法
1.沒有返回值和參數的方法
objectName.MethodName()
// objectName:對象名// MethodName:調用方法名// 因為沒有返回值,所以不創建變量并賦值
2.有返回值、沒有參數的方法
variableName = objectName.MethodName();
// variableName:持有返回值的變量名// objectName:對象名// MethodName:我們調用的方法名// 因為有返回值,所以要創建變量并賦值
3.沒有返回值、有參數的方法
objectName.MethodName(argument,argument,...);
// objectName:對象名// MethodName:我們調用的方法名// argument:每個參數的實參// 因為有參數,所以要在括號里加上argument
4.有返回值、有參數的方法
variableName = objectName.MethodName(argument,argument,...)
// variable:持有返回值的變量名// objectName:對象名// MethodName:我們調用的方法名// argument:每個參數的實參// 因為有返回值且有參數,所以要創建變量并賦值,在括號里加上argument。
以洗牌為例,這是個不需要返回值和參數的方法:
deck.Shuffle();
我們執行程序時,到達方法調用的部分,程序會轉到方法,執行方法中的代碼,然后返回到原始程序中的下一行代碼。
從一副牌中抓取頂牌的實例(調用有返回值但無參數的方法):
card = deck.TakeTopCard();
// 我們調用一個方法,返回一個值,我們需要再設置一個變量來持有這個值。// 方法名之后要加()。deck.TakeTopCard();
// 而這個代碼只是單純地用方法處理,而不返回。// 所以對于有返回的方法,我們應該設法保存返回值以便后續對其進行操作。
切牌的實例(調用有參數但無返回值的方法):
deck.Cut(26);
// 在特定的位置26進行切牌// 只有稍微復雜的調用方法才會有參數// 調用的時候,對于方法頭中的每一個參數我們都要提供一個實參方法頭中的參數數量和方法調用中的實參數量必須匹配。
對于方法調用中的每個參數,參數的數據類型必須與參數的數據類型匹配。
如果一個方法有多個參數,我們需要以正確的順序提供它們。C#使用方法調用中列出參數的順序來匹配參數和實參。
如果參數是值類型,我們可以為實參使用變量,也可以使用文字。
int cutLocation = 26;
deck.Cut(cutLocation);
// 這種形式也是可以的
當調用的方法既有返回值又有參數時,有:
defLocation = bandName.IndexOf("Def");
// 我們提供了一個字符串,作為實參,將返回值保存在defLocation中。
參考^Beginning C# Programming with Unity Visual Studio Edition