参考:https://www.bilibili.com/video/BV1TJ411h7cZ?p=234
using System;
using System.Linq;
namespace ConsoleApplication1
{
public enum Grade {A = 4, B = 3, C = 2, D = 1, E = 0};
class Program
{
static void Main(string[] args)
{
//C#中的扩展方法,可以实现给一个现有类添加一个新的方法而不必重新继承或者更改原有类的代码。
//如Linq中就使用了这样的特性。如:原来的int数组没有OrderBy()这样的排序方法,但是使用using System.Linq就可以使用
int[] nums = { 1, 8, 9, 6, 4, -1, -9 };
var orderNums = nums.OrderBy(x => x);
foreach(var i in orderNums)
{
Console.Write("{0} ", i);
}
Console.WriteLine();
//下面我们来手动实现给一个string类添加一个拓展的方法,统计该string中有多少个单词。
string s = "Hello! this is a great world!";
Console.WriteLine(s.WordCount());
Console.WriteLine();
//下面来给一个枚举类型添加一个拓展方法,先看命名空间开头定义一个枚举类型Grade
Grade xiaoming = Grade.A;
Grade wanggang = Grade.D;
Console.WriteLine("xiaoming {0} pass", xiaoming.IsPass() ? "is" : "not");
Console.WriteLine("wanggang {0} pass", wanggang.IsPass() ? "is" : "not");
Console.ReadKey();
}
}
//这是写string拓展方法的类,必须是static的
public static class StringExtension
{
//这是拓展string的方法也必须是static的,且其参数列表第一个就是要扩展的类型使用 this string str,当然如果有其他参数要传入可以添加
//如:(this string str, int a, string b)
public static int WordCount(this string str)
{
return str.Split(new char[] { ' ', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
//这个类用来拓展自定义的枚举类型
public static class EnumExtention
{
//这个变量不一定要public static 我们定义它来只是便于在类外更改
public static Grade min = Grade.C;
public static bool IsPass(this Grade grade)
{
return grade >= min;
}
}
}