如何根据某些条件 return 不同的 class 对象?
How to return different class object depending on some condition?
我有根据某些条件创建 class 对象的方法,并且只想 return 满足条件的对象。在 return 方法中,我需要调用该对象的 class 方法
我可以使用 object
、dynamic
或 Tuple
但是我们如何使用反射或其他方法来 return 只有一个对象?
public dynamic GetInvokeType(string id)
{
log.Info("GetInvokeType(): " + id);
if (id.ToLower() == "cm")
{
BCMSDashboardManager b = new BCMSDashboardManager();
return b;
}
else
{
SIPManager s = new SIPManager();
return s;
}
}
在 returned 方法中,我将根据 returned class 对象调用它的方法。所以,我只想 return 一个对象,而不是 Tuple
、object
或 dynamic
类型。
你应该阅读一些关于 factory pattern 的内容。
很快,你应该这样做:
- 为您的管理器(SIPManager,...)创建通用接口 IManager
一些方法将 return class 的实例(实现 IManager 接口)
// Common interface with desired methods
public interface IManager
{
void Manage();
}
public class BCMSDashboardManager : IManager
{
public void Manage()
{
Console.WriteLine("BCMSDashboardManager");
}
}
public class SIPManager : IManager
{
public void Manage()
{
Console.WriteLine("SIPManager");
}
}
现在您可以创建工厂方法,它 returns 特定 class
的实例
public IManager GetInvokeType(string id)
{
switch (id.ToUpperInvariant())
{
case "CM":
return new BCMSDashboardManager();
default:
return new SIPManager();
}
}
我有根据某些条件创建 class 对象的方法,并且只想 return 满足条件的对象。在 return 方法中,我需要调用该对象的 class 方法
我可以使用 object
、dynamic
或 Tuple
但是我们如何使用反射或其他方法来 return 只有一个对象?
public dynamic GetInvokeType(string id)
{
log.Info("GetInvokeType(): " + id);
if (id.ToLower() == "cm")
{
BCMSDashboardManager b = new BCMSDashboardManager();
return b;
}
else
{
SIPManager s = new SIPManager();
return s;
}
}
在 returned 方法中,我将根据 returned class 对象调用它的方法。所以,我只想 return 一个对象,而不是 Tuple
、object
或 dynamic
类型。
你应该阅读一些关于 factory pattern 的内容。
很快,你应该这样做:
- 为您的管理器(SIPManager,...)创建通用接口 IManager
一些方法将 return class 的实例(实现 IManager 接口)
// Common interface with desired methods public interface IManager { void Manage(); } public class BCMSDashboardManager : IManager { public void Manage() { Console.WriteLine("BCMSDashboardManager"); } } public class SIPManager : IManager { public void Manage() { Console.WriteLine("SIPManager"); } }
现在您可以创建工厂方法,它 returns 特定 class
的实例public IManager GetInvokeType(string id)
{
switch (id.ToUpperInvariant())
{
case "CM":
return new BCMSDashboardManager();
default:
return new SIPManager();
}
}