当前位置:  开发笔记 > 编程语言 > 正文

选择要实例化c#的类

如何解决《选择要实例化c#的类》经验,为你挑选了2个好方法。

我想要做的是选择适当的类来实例化基于传入的括号.目前我有两个类(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;
}

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



1> Tamas Czineg..:

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

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方法模式的Wikipedia文章.



2> Adam Ralph..:

我将为您的类使用一个公共接口,并使用一个通用的工厂方法使用一个单独的工厂类,如下所示:

class Program
{
    static void Main(string[] args)
    {
        IAnimal animal = AnimalFactory.CreateAnimal();

        animal.Speak();

        Console.ReadKey();
    }
}

public abstract class AnimalFactory
{
    public static IAnimal CreateAnimal() where T : IAnimal, new()
    {
        return new T();
    }
}

public interface IAnimal
{
    void Speak();
}

public class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Woof");
    }
}

public class Cat : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("Meow");
    }
}

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有