我想要做的是选择适当的类来实例化基于传入的括号.目前我有两个类(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方法模式的Wikipedia文章.
我将为您的类使用一个公共接口,并使用一个通用的工厂方法使用一个单独的工厂类,如下所示:
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"); } }