服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - ASP.NET教程 - C#可以减少或不使用switch有什么方法

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

2019-10-27 11:33C#教程网 ASP.NET教程

减少或不使用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的应用): 

复制代码代码如下:


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


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

复制代码代码如下:


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

延伸 · 阅读

精彩推荐