C# 一些基础

很多人做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);

猜你喜欢

转载自blog.csdn.net/qq_38913715/article/details/128492468
今日推荐