对c#扩展方法的理解

c# 扩展方法详解

扩展方法 能够使我们对现有类“添加方法”,而无需创建新的派生类,重新编译或者以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩张类型上的实例方法一样使用。

扩展方法的定义

  1. 定义一个静态类来包含静态的扩展方法
  2. 该方法的第一个参数指定方法所操作的类型;该参数必须以this 修饰符开头
  3. 在调用代码中添加一条using指令以指定扩展方法的类的命名空间
  4. 与实例方法一样的调用方式。

在unity 中的Dotween,还有c#中的linq中调用集合和数组的方式相同
用简单的linq的例子来举例说明
一般我们调用List.Find来查找对应的元素,或者自己定义一个方法,将list作为一个参数传递进去
对于拓展方法我们可以这样做

namespace BUBBLE 
{
    public static class StructExport 
    {
        public static T XX_Find<T>(this List<T> list, Predicate<T> match) 
        {
            for (int i = 0; i < list.Count; i++)
            {
                if (match(list[i]))
                {
                    return list[i];
                }
            }
            return default(T);
        }      
    }
}

注意:这里的类的定义和方法的定义都有static修饰符,方法的第一个参数有this修饰符。

调用的时候我们就可以

 List<string> strs = new List<string>() { "1", "2", "2", "2", "2", "2", "2", "2", "2" };
        string s =  strs.XX_Find((s => s == "1"));
        Debug.Log(s);

这样的扩展方法是不是很简洁明了

与unity中的常用类配合

在unity中我们有遇见过DOtween中的直接拿对应的常用的unity类去调用对应的动画的方法,其实这也是unity的拓展方法
ShortcutExtensions只是做一层中转,它调用的是DOTween的相关接口,以DoMove为例:
类似这样的
在这里我们做一个简单的查找自身物体下的对应名字的子物体的方法

public static Transform FindInAllChild(this Transform transform, string name)
        {
            for (int i = 0; i < transform.childCount; i++)
            {
                if (transform.GetChild(i).name == name)
                {
                    return transform.GetChild(i);
                }
                return FindInAllChild(transform.GetChild(i), name);
            }
            return null;
        }

用递归的方式持续查找下一级并返回对应名字的Transfrom

        transform.FindInAllChild("1");

调用方式页很简单

不仅仅这些功能 总而言之,这个扩展方法有利于我们更加便利的开发。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bubblingo0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值