加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

选择要实例化c#的类

发布时间:2020-12-15 19:58:22 所属栏目:百科 来源:网络整理
导读:我想要做的是选择适当的类来实例化基于传入的括号. 目前,我有两个类(ClassA和ClassB),并根据括号使用2种方法调用这些im.什么 我想实现的是只使用一种方法基于传递的字符串括号实例化ClassA或ClassB. 我真的不知道如何传回类对象使用.. 我的方法是在方法A中调
我想要做的是选择适当的类来实例化基于传入的括号.
目前,我有两个类(ClassA和ClassB),并根据括号使用2种方法调用这些im.什么
我想实现的是只使用一种方法基于传递的字符串括号实例化ClassA或ClassB.

我真的不知道如何传回类对象使用..

我的方法是在方法A中调用类来实例化然后我可以使用它. ClassA myclass = new ClassA();

我确实考虑使用以下但我不(如果我诚实)知道如何实例化对象o或在MyMethod传回它时使用它.
object o似乎不允许我访问A类或B类中的公共字符串方法.

public class ClassA
{
    public ClassA()
    {
        //Do something for Class A
    }
    public string msgA()
    {
        return "Here is msg A";
    }
}

public class ClassB
{
    public ClassB()
    {
        //Do something for Class B
    }
    public string msgB()
    {
        return "Here is msg B";
    }
}

private string MyMethod()
{
    object o = GetClassToInstantiate("ClassA");
    //Use object o 
}

private object GetClassToInstantiate(string parameter)
{
    object temp = null;
    switch (parameter)
    {
        case "ClassA":
            temp = new ClassA();
            break;
    }

    return temp;
}

任何建议如何我可以解决这个可能非常容易的情况.

解决方法

你需要的是基类中的工厂方法:

enum ClassType { ClassA,ClassB }

class ClassBase
{
   public static ClassBase Create(ClassType  classType)
   {
       switch (classType)
       {
           case ClassType.ClassA: return new ClassA();
           case ClassType.ClassB: return new ClassB();
           default: throw new ArgumentOutOfRangeException();
       }
   }
}

class ClassA : ClassBase
{
}

class ClassB : ClassBase
{
}

有关详细信息,请查看Factory method pattern上的维基百科文章.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读