[Unity] C#中级编程 - 09 - 扩展方法
Posted L建豪 忄YH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Unity] C#中级编程 - 09 - 扩展方法相关的知识,希望对你有一定的参考价值。
[Unity中文课堂教程] C#中级编程 - 09 - 扩展方法
原教程视频地址:
《[Unity中文课堂教程预告片] C#中级编程_哔哩哔哩_bilibili》
内容短小精悍简练,每节只有几分钟。很适合用来预习和复习。
扩展方法
- 在之前,为了在类中添加新的方法,会使用继承原理。创建新的类继承父类,在子类中添加需要的内容。这样还是不够完美,移植性不强。
- 使用扩展方法,可以往指定类中添加方法。好像没有扩展属性。
脚本①:
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); // 这样没有错误,也可正常运行
- 总结特点:
- 定义扩展方法的形式:公开访问、静态关键字、第一个参数指代目标类。
- 扩展方法调用时需要实例化对象,和普通方法一样,和静态方法相对。
- 扩展方法必须定义在非泛型、静态类中。
- 第一个参数在实际调用中不需要填写,在方法内该参数可调用,指代类的实例化对象。
- 如果扩展方法有重名,会调用类原有的方法。
- 扩展方法还可以使用静态方式调用,这时第一个参数需要填写实例化对象。这个现象有趣。
扩展方法为允许后再添加,有时编译不会出错,但是运行时会报错。
以上是关于[Unity] C#中级编程 - 09 - 扩展方法的主要内容,如果未能解决你的问题,请参考以下文章
[Unity] C#中级编程 - 10 - 命名空间/using
[Unity] C#中级编程 - 10 - 命名空间/using