C# 为枚举创建新方法
2016-07-22 15:27
501 查看
可以使用扩展方法添加特定于某个特定枚举类型的功能。
示例
在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分。该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中,
以便该类型的每个实例现在都“知道”它是否表示合格的等级分。
请注意,Extensions 类还包含一个动态更新的静态变量,并且扩展方法的返回值反映了该变量的当前值。 这表明在幕后,将在定义扩展方法的静态类上直接调用这些方法。
示例
在下面的示例中,Grades 枚举表示学生可能在班里收到的字母等级分。该示例将一个名为 Passing 的扩展方法添加到 Grades 类型中,
以便该类型的每个实例现在都“知道”它是否表示合格的等级分。
using System; using System.Collections.Generic; using System.Text; using System.Linq; namespace EnumExtension { // Define an extension method in a non-nested static class. public static class Extensions { public static Grades minPassing = Grades.D; public static bool Passing(this Grades grade) { return grade >= minPassing; } } public enum Grades { F = 0, D=1, C=2, B=3, A=4 }; class Program { static void Main(string[] args) { Grades g1 = Grades.D; Grades g2 = Grades.F; Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not"); Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not"); Extensions.minPassing = Grades.C; Console.WriteLine("\r\nRaising the bar!\r\n"); Console.WriteLine("First {0} a passing grade.", g1.Passing() ? "is" : "is not"); Console.WriteLine("Second {0} a passing grade.", g2.Passing() ? "is" : "is not"); } } } /* Output: First is a passing grade. Second is not a passing grade. Raising the bar! First is not a passing grade. Second is not a passing grade. */
请注意,Extensions 类还包含一个动态更新的静态变量,并且扩展方法的返回值反映了该变量的当前值。 这表明在幕后,将在定义扩展方法的静态类上直接调用这些方法。
相关文章推荐
- 中兴c#编程规范
- C#编程规范
- C# 二次开发RTX实现右下角弹窗提醒功能
- 如何安全关闭串口
- C# 读取EXCEL文件的三种经典方法
- C# 实现和调用自定义扩展方法
- C# 扩展方法
- C#实现输入一个字符串输出该字符串字符的所有排列方式
- C#程序猿电脑重装记录
- C#获取本机的外网IP
- C# 读COM PORT
- C#获取程序集自动增加的版本号和编译时间
- C# 通过Thrift 1 操作 HBase
- C#------编码规范
- Webservice的简单应用(wsdl的获取)
- C# xml文档读写
- C#泛型类与接口
- C# 值类型与引用类型详解
- 匿名方法 Lambda表达式
- C# new virtual和override 区别