传进来一个动物,如果它是猫就return new 猫();是狗就return new 狗();
怎么做?
不要用typeof,因为要列举的太多了
C#初学,java里头可以用反射做。。。
string animal = "cat";
object a = Activator.CreateInstance(animal);
return a;
设计模式里的工厂模式专门解决你这个问题!请自行查阅"工厂模式"
没错。不过,工厂模式内部的实现也躲不了无数个 case 或者无数个 if,只有使用 Reflection,通过字符串直接创建对象,才能避开一个一个的判断。但是,按照楼主的情况,您传进来的是 "cat"、"dog" 之类的单词,而非 "LzNameSpace.SubNameSpace1.Cat" 这样的形式,所有无法直接创建,若要使用反射,必须先将 "cat" 转成 "LzNameSpace.SubNameSpace1.Cat",这一步转换也会带来不必要的穷举和罗嗦的字符串操作,因为可能 cat 在 subnamespace1 下面,而 dog 却在 subnamespace3 下面,没有规律可循。所以,总的来说,抽象工厂模式是比较适合的
public abstract class Animal
{
public abstract string AnimalType {get;}
public override string ToString(){ return AnimalType; }
//...
//...
//...
}
public class Cat:Animal
{
public override string AnimalType
{
get{ return "Cat";}
}
}
public class Dog:Animal
{
public override string AnimalType
{
get{return "Dog";}
}
}
..
..
..
public class EnterClass
{
public static void Main(string[] argv)
{
// ...
//start foreach animal in animals
Console.WriteLine(animal.ToString());
//end foreach }}