这严格用于OOP的学习目的。
我有一个继承的层次结构,WANTS看起来像这样:
`
-> Fruit->0-n fruits classes
-> Vegetable -> 0-n vegetable classes
Food-> Milk -> 0-n milk classes
-> Grain -> 0-n grain classes
-> Meat -> 0-n meat classes
`
基类是食物,所有水果/蔬菜/牛奶/谷物/肉类延伸食物。然后水果类可能有一个苹果,香蕉,柠檬等的孩子。所以苹果,香蕉,柠檬将延长水果,延长食物。
现在你可以想象,世界上有很多不同类型的水果/蔬菜/奶/谷物/肉。为每个人制作一个单独的课程太多了。
我想要完成的是:
功能与此类似:
public class ${ClassName} : ${Category}{
//Imagine I can put a variable name right where ${ClassName} is that holds Banana.
//I'd then determine ${Category} simply from the location that the user entered the value Banana.
//I'd now have:
} public class Banana : Fruit{
}
在这种情况下,我并不关心类中任何方法/变量/属性的变化。它们都将保持不变,我只希望ClassName更改为相应的名称。
这可能吗?还是我在童话般的土地?理想情况下,上述方法成功后。我希望能够使用object.getType()获取ClassName,并且如果用户输入其中一个,则返回类似Apple,Banana,Lemon的内容。
答案 0 :(得分:0)
基于Jim的评论,我认为你对课程有错误的想法。理想情况下(取决于域),您希望使用Name的属性为Fruit基类建模。 “香蕉”是水果,“苹果”是水果,......等等。
public class Fruit {
public string Name { get; set; }
}
如果您确实需要具体,可以创建使用Fruit作为基类的类。可能沿着Berry,Drupe,Legume等行。然后你仍然需要一个Name属性来定义水果的具体实例是什么“Raspberry”,“Blueberry”,...
public class Berry : Fruit {
// berry-specific properties
}
一旦你对类和结构化有了更基本的理解,以及具体和抽象类型之间的区别,我建议你看看Factory Method和Abstract Factory设计模式。如果您确实需要在运行时确定具体类型,那些描述了您可以使用的技术。