如何扩展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());
运行结果: