• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

有在论坛看见一帖,《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");

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#对文件下文本文件内容的读取发布时间:2022-07-13
下一篇:
[C#参考]byte数组和Image的相互转换发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap