当我研究如何在C#中为ASP.NET项目创建子类时,我感觉非常聪明,然后我发现了一个问题 - 我不知道如何基于结果创建正确子类的对象SQL查询。
假设您有一个名为Animal的类和两个名为Zebra和Elephant的子类。你明白了吗?
我想要做的是执行SQL查询,如果返回的行有行[“Type”] =“Zebra”,则加载一个Zebra对象(或者如果它是一个大象那么......)。
因此,原则上,Animal类将有一个静态方法:
class Animal{
public static Animal Load(DataRow row){
if (row["Type"]=="Zebra"){
return new Zebra();
}
}
class Zebra : Animal{
//some code here
}
这是完全可能还是我只是明白了子类的错误想法。很明显,我不是OO专家。
提前致谢, 杰克
答案 0 :(得分:5)
您可以实施方法工厂模式。 http://en.wikipedia.org/wiki/Factory_method_pattern
答案 1 :(得分:1)
试试这个:
public interface IAnimal
{ }
public class Animal : IAnimal
{
public static IAnimal Load(String type)
{
IAnimal animal = null;
switch (type)
{
case "Zebra" :
animal = new Zebra();
break;
case "Elephant" :
animal = new Elephant();
break;
default:
throw new Exception();
}
return animal;
}
}
public class Zebra : Animal
{
public int NrOfStripes { get; set; }
public static Zebra ZebraFactory()
{
return new Zebra();
}
}
public class Elephant : Animal
{
public int LengthOfTrunk { get; set; }
}
尝试一下:
class Program
{
static void Main(string[] args)
{
IAnimal zebra = Animal.Load("Zebra");
IAnimal elephant = Animal.Load("Elephant");
}
}
答案 2 :(得分:0)
我认为没关系:
public class Animal
{
public static Animal Load(string row)
{
if (row == "Zebra")
{
return new Zebra();
}
else if (row == "Elephant")
{
return new Elephant();
}
return null;
}
}
public class Zebra : Animal
{
public new string ToString()
{
return "Zebra";
}
}
public class Elephant : Animal
{
public new string ToString()
{
return "Elephant";
}
}
static void Main(string[] args)
{
Animal a1 = Animal.Load("Zebra");
System.Console.WriteLine(((Zebra)a1).ToString());
System.Console.WriteLine(((Elephant)a1).ToString()); // Exception
Animal a2 = Animal.Load("Elephant");
System.Console.WriteLine(a2.ToString());
}