[Unity] C#中级编程 - 09 - 扩展方法

Posted L建豪 忄YH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity] C#中级编程 - 09 - 扩展方法相关的知识,希望对你有一定的参考价值。

[Unity中文课堂教程] C#中级编程 - 09 - 扩展方法

原教程视频地址:

《[Unity中文课堂教程预告片] C#中级编程_哔哩哔哩_bilibili

C#中级编程 - Unity中文课堂 (u3d.cn)

内容短小精悍简练,每节只有几分钟。很适合用来预习和复习。

扩展方法

  • 在之前,为了在类中添加新的方法,会使用继承原理。创建新的类继承父类,在子类中添加需要的内容。这样还是不够完美,移植性不强。
  • 使用扩展方法,可以指定类中添加方法。好像没有扩展属性

脚本①

public class Exercise_4_18 : MonoBehaviour

	// 这个类被扩展
	public int num_0 = 18;
	
	public void name_0(int num_1)
	
		Debug.Log("原有方法:" + num_1); 		// 扩展方法
	

脚本②

public static class Exercise_4_19 	// 必须是无继承的静态类,意味着不能实例化

	public static int num_0 = 18;
	
	// 这个类用于扩展
	public static void name_1(this Exercise_4_18 obj, int num_1) // 注意格式
	
		Debug.Log(obj.num_0 + ":扩展方法:" + num_1); 	// 可调用扩展类的属性或方法
	
	
	
	// Extension method must be defined in a non-generic static class
	// 必须在非泛型静态类中定义扩展方法

脚本③

public class Exercise_4_20 : MonoBehaviour

    void Start()
    		
		Exercise_4_18 myClass = new Exercise_4_18();
		myClass.name_0(20);
		myClass.name_1(19);				// 如果扩展方法重名,会调用原有方法
		
		
        // Exercise_4_18.name_1(19);		// 编译报错,提示没有定义。表示扩展方法是运行时
		// Exercise_4_19.name_1(null,19);	// 编译没错,运行报错
		Exercise_4_19.name_1(myClass,19);	// 这样没有错误,也可正常运行
		
    	

  • 总结特点
    1. 定义扩展方法的形式:公开访问、静态关键字、第一个参数指代目标类。
    2. 扩展方法调用时需要实例化对象,和普通方法一样,和静态方法相对。
    3. 扩展方法必须定义在非泛型静态类中。
    4. 第一个参数在实际调用中不需要填写,在方法内该参数可调用,指代类的实例化对象。
    5. 如果扩展方法有重名,会调用类原有的方法。
    6. 扩展方法还可以使用静态方式调用,这时第一个参数需要填写实例化对象。这个现象有趣

扩展方法为允许后再添加,有时编译不会出错,但是运行时会报错

以上是关于[Unity] C#中级编程 - 09 - 扩展方法的主要内容,如果未能解决你的问题,请参考以下文章

[Unity] C#中级编程 - 08 - 接口

[Unity] C#中级编程 - 03 - 重载

[Unity] C#中级编程 - 10 - 命名空间/using

[Unity] C#中级编程 - 10 - 命名空间/using

[Unity] C#中级编程 - 10 - 命名空间/using

[Unity] C#中级编程 - 04 - 泛型/构造函数/ref