C# 的扩展方法在 LINQ 中的实现
扩展方法:
有个类型的Class,不想修改原本的数据类型,要添加一些新的功能,不想用继承的方式,原来的数据类型有多的方法
拓展方式:又称语法塘
优点:增强了可读性
缺点:谨慎使用,会让其他人理解不了
举例:
classProgram
{
staticvoidMain(string[] args)
{
int[]ints = { 10, 45, 15, 39, 21, 26 };
varresult = ints.OrderBy(g => g);
foreach(vari in result)
{
Console.WriteLine("{0}",i);
}
Console.ReadLine();
}
}
C# 的扩展方法的语法
对字符串进行扩展方法:
classProgram
{
staticvoidMain(string[] args)
{
SringCount();
Console.ReadLine();
}
privatestaticvoidSringCount()
{
strings = "This is jikexueyuan C# tutorial!";
inti = s.WordCount();//调用要编译一次
Console.WriteLine("word count of s is {0}",i);
}
}
publicstaticclassStirngExtension//拓展方法要在静态的Class里
{
publicstaticintWordCount(thisstringstr)//静态的方法名,参数必须以this开头
{
returnstr.Split(newchar[]{ ' ', '.','!', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
C# 的扩展方法在枚举类型上的实现
publicenumGrades {F=0,D=1,C=2,B=3,A=4 };//枚举类型
classProgram
{
staticvoidMain(string[] args)
{
varg1 =Grades.D;
varg2 = Grades.F;
varg3 = Grades.A;
Console.WriteLine("First {0} a passing grade", g1.Passing() ? "is": "is not");
Console.WriteLine("Second {0} a passing grade", g2.Passing() ? "is": "is not");
Console.WriteLine("Third {0} a passing grade", g3.Passing() ? "is": "is not");
Extesions.minPassing = Grades.C;
Console.WriteLine("First {0} a passing grade", g1.Passing() ? "is": "is not");
Console.WriteLine("Second {0} a passing grade", g2.Passing() ? "is": "is not");
Console.WriteLine("Third {0} a passing grade ",g3.Passing() ? "is" : "isnot");
Console.ReadLine();
}
}
publicstaticclassExtesions//静态的Class
{
publicstaticGrades minPassing = Grades.D;//最低级别为D
publicstaticboolPassing(thisGradesgrade)//静态的方法
{
returngrade >= minPassing;//是否通过一定的级别
}
}