[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. 扩展方法还可以使用静态方式调用,这时第一个参数需要填写实例化对象。这个现象有趣

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值