为了账号安全,请及时绑定邮箱和手机立即绑定

C#用什么方法可以减少或不使用switch

标签:
C#

有在论坛看见一帖,《C#用什么方法可以减少或不使用switch》

 

Insus.NET的解决方法,是使用工厂方法来处理,可以创建一个工厂接口,然后每个方法设计为一个工厂类,并实现工厂接口。

工厂接口:

IGetFactory

using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>/// Summary description for IGetFactory/// </summary>namespace Insus.NET{    public interface IGetFactory    {        string GetResult();    }}


Get工厂类:

GetFactory

using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>/// Summary description for GetFactory/// </summary>namespace Insus.NET{    public class GetFactory : IGetFactory     {        public GetFactory()        {            //            // TODO: Add constructor logic here            //        }        public string GetResult()        {            return "get";        }    }}


GetTest类:

GetTestFactory

using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>/// Summary description for GetTestFactory/// </summary>namespace Insus.NET{    public class GetTestFactory : IGetFactory     {        public GetTestFactory()        {            //            // TODO: Add constructor logic here            //        }        public string GetResult()        {            return "gettest";        }    }}


以及GetSet类:

GetSetFactory

using System;using System.Collections.Generic;using System.Linq;using System.Web;/// <summary>/// Summary description for GetSetFactory/// </summary>namespace Insus.NET{    public class GetSetFactory : IGetFactory     {        public GetSetFactory()        {            //            // TODO: Add constructor logic here            //        }        public string GetResult()        {            return "getset";        }    }}


因此你的代码最终变为:

View Code

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using Insus.NET;public partial class _Default : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {    }    public string Exec(string mothedName)    {        string ret = "";                       //switch (mothedName)        //{        //    case "get":        //        ret = get();        //        break;        //    case "get1":        //        ret = gettest();        //        break;        //    //.....        //    case "testget":        //        ret = getrset();        //        break;        //}        IGetFactory get = new GetTestFactory();  //这里是实现工厂类        ret = get.GetResult();        return ret;    }    //public string get()    //{    //    return "get";    //}    //public string gettest()    //{    //    return "gettest";    //}    //public string getrset()    //{    //    return "getset";    //}}

 


15:50修改补充如下:
上面的最终代码,无传入参数mothedName,怎样办,我们可以虑一下反射,如果改为反射击,那传入的参数需要规范一下方可以:

"get" >>"Get";
"get1" >>"GetTest"
"testget" >> "GetSet"

 这样一改之后,就可以使用反射语法了,可以把

IGetFactory get = new GetTestFactory();  //这里是实现工厂类


改为(下面是asp.net的应用):

Reflection

IGetFactory get = (IGetFactory)Assembly.Load("App_Code").CreateInstance("Insus.NET." + mothedName + "Factory");


如果在非asp.net下,可以把"App_Code"改为"程序集名称":

View Code

IGetFactory get = (IGetFactory)Assembly.Load("程序集名称").CreateInstance("Insus.NET." + mothedName + "Factory");

 

 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消