很多人做unity之前很少碰C#
这导致一些比较重要的C#基础被忽视
下面是一些心得体会
C#里面的泛型(T),泛型类,泛型方法,泛型接口
大家可能经常看到 List
不一定非写T 可以是任意的
泛型方法
public void test<T>(T param){
}
test<int>(10);
泛型类 你会发现 和 List 一模一样
public class TClass<T>
{
public void add(T t)
{
}
}
TClass<int> t = new TClass<int>();
泛型接口
interface ITClass<T>
{
void test(T param);
}
class TClass<T> : ITClass<T>
{
public void test(T param)
{
throw new NotImplementedException();
}
}
如何判断一个实例是否实现某个接口?
typeof(IUpdate).IsAssignableFrom( t.GetType() );
泛型置空 必须用default 他会自动把int 变成0 引用变为null
list[index] = default(T);
C#内置的委托 Action 无返回值 可以有参数
public delegate void Action();
Action action = this.cc;
action();
public void cc(){
}
Action<string> action = this.cc;
action("aaa");
public void cc(string a) {
}
Func C# 内置的委托 有返回值 有参数 可以看例子
Func<string, int> a = this.cc;
a("aa");
public int cc(string a)
{
return 1;
}
Event
可以添加多次 触发也是多次
其实这个就是委托的多个回调版本
Action ChangeNum; 就是一个普通委托
ChangeNum(1); 这个就是回调一个方法
用event 声明一下呢 就可以一次回调多个 并传参了
ChangeNum += aaa;
ChangeNum += bbb;
ChangeNum += aaa;
ChangeNum += bbb;
ChangeNum(1);
public void aaa(int a)
{
UnityEngine.Debug.Log("aaaaaaaaaaaaaaaaaaa");
}
public void bbb(int a)
{
UnityEngine.Debug.Log("bbbbbbbbbbbbbbbbbbb");
}
public event Action<int> ChangeNum;
//使用委托来声明事件
内置的委托还有
Predicate 和 Comparison
声明委托
public delegate void Action(T obj);