一:三元运算符
1.语法形式 condition ? expression1 : expression2;
condition--是一个bool值--讲解了基本的逻辑判断
如果true则输出expression1它可以是任何合法的表达式,包括常量、变量、函数调用、算术操作
如果false则expression2
int x = 5;
int y = 10;
int max = x > y ? x : y;
二:静态
1.可以直接用类调用--无需先对类进行实例化--属于类的本身
2.原理--类的每个对象具有相同的变量--相同的值--静态字段在内存中只有一份副本,并且在程序的整个执行过程中保持不变。
3.用法:先在Player代码里面--创建static --每有一个物体挂这个组件就会加一
using UnityEngine;
using System.Collections;
public class Player : MonoBehaviour
{
//静态变量是在类的所有实例之间
//共享的变量。
public static int playerCount = 0;
void Start()
{
//通过递增静态变量了解
//已创建此类的多少个对象。
playerCount++;
}
}
调用方法--在其他代码里面直接调用 Player.
using UnityEngine;
using System.Collections;
public class PlayerManager : MonoBehaviour
{
void Start()
{
//可以使用类名和点运算符
//来访问静态变量。
int x = Player.playerCount;
}
}
不能在静态方法内部--使用非静态类成员变量
因为静态方法属于类---而非静态变量属于类的实例
三:方法重构
意思是可以让你的函数方法名字相同--但是传入的参数类型/参数数量不同
当你调用函数的时候就可以通过你使用的参数--选择是否选择重构的函数
using UnityEngine;
using System.Collections;
public class SomeClass
{
//第一个 Add 方法的签名为
//“Add(int, int)”。该签名必须具有唯一性。
public int Add(int num1, int num2)
{
return num1 + num2;
}
//第二个 Add 方法的签名为
//“Add(string, string)”。同样,该签名必须具有唯一性。
public string Add(string str1, string str2)
{
return str1 + str2;
}
}
using UnityEngine;
using System.Collections;
public class SomeOtherClass : MonoBehaviour
{
void Start ()
{
SomeClass myClass = new SomeClass();
//具体调用的 Add 方法将取决于
//传入的参数。
myClass.Add (1, 2);
myClass.Add ("Hello ", "World");
}
}
四:泛型--Generics
1.原理--类型可以作为参数传递给类和方法
首先聊一聊泛型的泛型方法
public class SomeClass
{
//通用方法
public T GenericMethod<T> (T param)
{
return param;
}
然后就去尝试调用他
//先实例化类
SomeClass myClass = new SomeClass();
//调用方法
int Result = myClass.GenericMethod<int>(5);
string Result = myClass.GenericMethod<string>("hello");
//如果是明显的类型--可以忽略后面的类型
float Result = myClass.GenericMethod(0.5f);
2.聊一下泛型类
using UnityEngine;
using System.Collections;
//这是一个通用类。注意通用类型“T”。
//“T”将被替换为实际类型,同样,
//该类中使用的“T”类型实例也将被替换。
public class GenericClass <T>
{
T item;
public void UpdateItem(T newItem)
{
item = newItem;
}
}
using UnityEngine;
using System.Collections;
public class GenericClassExample : MonoBehaviour
{
void Start ()
{
//为了创建通用类的对象,必须
//指定希望该类具有的类型。
GenericClass<int> myClass = new GenericClass<int>();
myClass.UpdateItem(5);
}
}
五:继承
一个类--构造函数--函数方法
子类--继承父类--构造函数--如果想要设定指定的父类构造函数--需要 在构造函数后面 :base()
调用基类的构造函数。这样做可以确保基类的构造函数在派生类的构造过程中得到执行
六:多态
实例化的时候---> 父类 起名1 = new 子类()-----向上转换
向下转换可以是
if(起名1 is 子类 )
子类 起名2 = (子类)起名1
七:接口----用于跨多个互不相关的类--意思是继承父类没有意义--实现接口很实用
接口名字一般都是I开头able结尾----public interface IKillable<T>;--- 意味着任何内容都具有泛型
要求: 接口中的函数必须被满足---void Kill(T damage)
using UnityEngine;
using System.Collections;
//这是只有一个必需方法的基本
//接口。
public interface IKillable
{
void Kill();
}
//这是一个通用接口,其中 T 是
//将由实现类提供的数据类型的
//占位符。
public interface IDamageable<T>
{
void Damage(T damageTaken);
}
using UnityEngine;
using System.Collections;
public class Avatar : MonoBehaviour, IKillable, IDamageable<float>
{
//IKillable 接口的必需方法
public void Kill()
{
//执行一些有趣操作
}
//IDamageable 接口的必需方法
public void Damage(float damageTaken)
{
//执行一些有趣操作
}
}
八.扩展方法---创建一个类的扩展--必须是静态的
using UnityEngine;
using System.Collections;
//创建一个包含所有扩展方法的类
//是很常见的做法。此类必须是静态类。
public static class ExtensionMethods
{
//扩展方法即使像普通方法一样使用,
//也必须声明为静态。请注意,第一个
//参数具有“this”关键字,后跟一个 Transform
//变量。此变量表示扩展方法会成为
//哪个类的一部分。
public static void ResetTransformation(this Transform trans)
{
trans.position = Vector3.zero;
trans.localRotation = Quaternion.identity;
trans.localScale = new Vector3(1, 1, 1);
}
}
using UnityEngine;
using System.Collections;
public class SomeClass : MonoBehaviour
{
void Start () {
//请注意,即使方法声明中
//有一个参数,也不会将任何参数传递给
//此扩展方法。调用此方法的
//Transform 对象会自动作为
//第一个参数传入。
transform.ResetTransformation();
}
}