首页 > 解决方案 > 如何根据某些条件返回不同的类对象?

问题描述

我有根据某些条件创建类对象的方法,并且只想返回满足条件的对象。在返回方法中,我需要调用该对象的类方法

我可以用object, dynamic, 或者Tuple但是我们如何用反射或其他方法只返回一个对象呢?

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;

    }
}

在返回的方法中,我将根据返回的类对象调用它的方法。所以,我只想返回一个对象,而不是 in Tupleobjectdynamictype 。

标签: c#.netfactory-pattern

解决方案


您应该阅读一些有关工厂模式的信息。

很快,你应该这样做:

  • 为您的经理创建通用接口IManager (SIPManager, ...)
  • 一些将返回类实例的方法(实现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");
        }
    }
    

现在你可以创建工厂方法,它返回特定类的实例

public IManager GetInvokeType(string id)
{
    switch (id.ToUpperInvariant())
    {
        case "CM":
            return new BCMSDashboardManager();
        default:
            return new SIPManager();
    }
}

推荐阅读