参考文献
蜜酒厅通讯社 游戏部 石中居士
对象(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