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


有在論壇看見一帖,《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");

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM