首页 > 代码库 > 对论坛讨论减少switch分支有感,使用特性反射出需要使用的类
对论坛讨论减少switch分支有感,使用特性反射出需要使用的类
今天在论坛上面看到问如何减少switch分支
我自己想了一下,觉得使用特性,可以直接减少switch的判断,于是就写了一些
表示效率可能无法和switch相提并论
下面就开始吧
首先设置接口
public interface IGetExec { string GetResult(); }
然后分别实现
public class GetExec : IGetExec { public string GetResult() { return "get"; } } public class Get1Exec : IGetExec { public string GetResult() { return "get1"; } } public class GetTestExec : IGetExec { public string GetResult() { return "gettest"; } }创建特性
[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = true)] sealed class TestAttribute : Attribute { private IGetExec ExecObj { get; set; } public TestAttribute(Type t) { this.ExecObj = Activator.CreateInstance(t) as IGetExec; } public string Exec() { return ExecObj.GetResult(); } }定义一个Enum 来判断具体使用哪个类
public enum TestEnum { [Test(typeof(GetExec))] get, [Test(typeof(Get1Exec))] getTest, [Test(typeof(GetTestExec))] get1 }然后扩展Enum的方法
public static class EnumClass { public static string Exec(this TestEnum e) { Type t = e.GetType(); var file = t.GetField(e.ToString()); var att = file.GetCustomAttributes(typeof(TestAttribute), false).Single(); if (att != null) { return (att as TestAttribute).Exec(); } else return null; } }
最后调用
public class Program { static void Main(string[] args) { Console.WriteLine(TestEnum.get.Exec()); Console.Read(); } }
完成只需要扩展IGetExec接口 然后添加enum即可实现扩展功能
对论坛讨论减少switch分支有感,使用特性反射出需要使用的类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。