如何扩展C#类中的方法

现在有一个计算和的方法,提供了两个加数求和的方法。

    public class Calc
    {
        public int Add(int a, int b)
        {
            return a + b;
        }
    }

计算之后打印到控制台中。

Console.WriteLine(new Calc().Add(1, 2));

但是现在有了新的需求:提供三个参数求和的函数,那么就需要在这个类中增加一个三元求和的方法。

一、重载:相同的方法名,不同的参数。

    public class Calc
    {
        public int Add(int a, int b)
        {
            return a + b;
        }

        public int Add(int a, int b, int c)
        {
            return a + b + c;
        }
    }

这个方法就是直接在原来的类中增加所需要的方法即可,简单易懂,其弊端在于,要对类Calc进行修改,如果下次又有新的需求还是需要修改这个类。

二、扩展:向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。

它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this修饰符为前缀。

    public static class MoreFunc
    {
        public static int Add(this Calc demo, int a, int b, int c)
        {
            return a + b + c;
        }
    }

关键点有三个:

1.静态类,静态方法;

2.函数方法与需要扩展的方法名称相同,第一个参数是需要扩展的方法所在的类;

3.参数不同,如果后面的参数与原来的相同,那么扩展失败,会仍然执行原类中的函数;

调用:

Calc calc = new Calc();
Console.WriteLine(calc.Add(1, 2));
Console.WriteLine(calc.Add(1, 2, 3));

三、为.net内置的类增加方法,如为string类增加一个排序方法。

        public static string Sort(this string str)
        {
            List<char> vs = str.ToArray().ToList();
            vs.Sort((a, b) =>
            {
                if (a > b) return 1;//调整位置
                else return -1;//不调整位置
            });
            string result = "";
            foreach (var item in vs)
            {
                result += item;
            }
            return result;
        }

调用:

string str = "david";
Console.WriteLine("str:" + str + " sort:" + str.Sort());

运行结果:

 

posted on 2020-05-22 09:47  freden  阅读(328)  评论(0编辑  收藏  举报