C#委托

在游戏中有一些需要经常使用的函数,比如加载Perfab,封装成接口:

 //生成Perfab接口函数, 参数为路径 + 父物体 + 位置
    public Transform GenerateObjects(string path, GameObject Parent, Transform Destination){
        Object perfab = Resources.Load(path, typeof(GameObject));
        GameObject Perfab = Instantiate(perfab) as GameObject;
        Perfab.transform.SetParent(Parent.transform, false);
        Perfab.transform.position = Destination.position;
        return Perfab.transform;
    }

接口函数可以交付给委托来执行,
声明委托:

 public delegate Transform GeneratePerfab (string s,GameObject g,Transform t);
 public GeneratePerfab gPerfab;

在Start中注册函数:

 void Start()
    {
        gPerfab = new GeneratePerfab (GenerateObjects);
    }

使用委托(一般不在外部调用委托):

 Transform portrait = chooseCard.GetComponent<Interface>().gPerfab(portrait_path, this.transform.GetChild(32).gameObject, this.transform.GetChild(k++));

Action和Func委托:
除了上面例子中的简单委托,C#提供了两类预定义好的委托类型Action和Func,两种都支持泛型。Action委托没有返回值,Func泛型参数列表的最后一个是返回值类型。

多播委托: 可以按顺序调用多个方法的委托,返回值类型一般声明为void,使用”+=“和”-=“添加或删除方法,多播委托只能得到最后一个方法返回的结果。
逐个调用多播委托中的方法:

Action a1 = Method1;
a1+=Method2;

Delegate[] delegates=a1.GetInvocationList();
foreach(delegate d in delegates){
	//d();
	d.DynamicInvoke(null);
}

匿名方法: 将一个没有名字的方法赋值给委托

Func<int,int,int> plus = delegate (int a,int b){
	int temp = a+b;
	return temp;
};

作用:减少代码量,降低复杂性,一般用来做回调

Lambda表达式:
相当于匿名方法的简写形式,如把上面的改写成Lambda表达式,最大的特点是参数不需要声明类型:

Func<int,int,int> plus = (a,b)=>{ int temp= a+b;return temp; };

另外只有一个参数的话可以省略括号,方法体只有一句话可以省略大括号。

C#事件机制:
事件基于委托,本质是private委托(不能由外部调用)。
事件的声明,事件只能声明为类的成员,不能再方法中声明:
public event + 委托类型 + 事件名,事件依然可以使用”+=“或”-=“添加或删除方法。
事件的定义相当于发布了一条消息,在事件中添加方法看作”订阅消息“。
事件和方法的主要区别在于:
事件只能内部调用,不能外部触发。

观察者模式:
被观察者和观察者:当观察者发现被观察者状态改变时,会触发事件的执行。典型就是游戏中按钮的点击,按钮是被观察者,观察者则是资源管理器或其他。
观察者模式通常基于事件机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
C# 委托(Delegate)是一种类型,它可以用于封装一个或多个方法,使其可以像其他对象一样传递、存储和调用。委托在事件处理、多线程等方面有着广泛的应用。 C# 委托的声明方式与方法类似,可以带有参数和返回值类型,例如: ```csharp public delegate int Calculate(int a, int b); ``` 上面的代码声明了一个名为 `Calculate` 的委托类型,它包含两个 `int` 类型的参数并返回一个 `int` 类型的值。接下来可以使用这个委托类型来封装一个或多个方法。 委托的使用步骤如下: 1. 声明委托类型 ```csharp public delegate void MyDelegate(string message); ``` 2. 定义委托变量 ```csharp MyDelegate myDelegate; ``` 3. 实例化委托变量 ```csharp myDelegate = new MyDelegate(MethodA); ``` 4. 调用委托 ```csharp myDelegate("Hello"); ``` 完整的示例代码如下: ```csharp using System; namespace DelegateDemo { public delegate void MyDelegate(string message); class Program { static void Main(string[] args) { MyDelegate myDelegate; myDelegate = new MyDelegate(MethodA); myDelegate += new MyDelegate(MethodB); myDelegate("Hello"); } static void MethodA(string message) { Console.WriteLine("MethodA: " + message); } static void MethodB(string message) { Console.WriteLine("MethodB: " + message); } } } ``` 上面的代码定义了一个名为 `MyDelegate` 的委托类型,包含一个 `string` 类型的参数并返回一个 `void` 类型的值。在 `Main` 方法中,首先将 `myDelegate` 委托变量实例化为 `MethodA` 方法,然后再将其实例化为 `MethodB` 方法。最终调用 `myDelegate` 委托变量时,将会依次调用 `MethodA` 和 `MethodB` 方法。 除了以上示例中的简单委托,还有多播委托、泛型委托、匿名委托等更加高级的委托用法,可以根据具体需求选择使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值