让我们考虑创建以下层次结构:
动物 - >类(哺乳动物,两栖动物......) - >家庭(猫科,犬科,......) - >物种(猫,虎,......)。
每个子类都依赖于前一个。
有关创建类似于此类的树状类的最佳方法的任何建议吗?
这只是我手头的问题的一个例子,但解决方案对我有很大的帮助......
感谢
真正的问题是:
我必须解析以下类型的消息0102060800FF。
首先,01告诉我我有一种特定类型的消息。 鉴于该类型,我必须在特定表中查找值02,依此类推......
我希望子层次结构的可能值由其父级过滤。我不确定我是否足够清楚。
感谢
答案 0 :(得分:1)
每个课程都属于实际的动物,是一个抽象的课程。 Tiger是一个具体的类,它继承自抽象类Felidae,来自抽象类Mammalia等。
如果你想变得非常花哨,你可以使用接口,如IPredator,IWarmBlooded;将它们定义为能力。
答案 1 :(得分:1)
这些天,赞成合成而不是继承。这是一个示例 - 需要更多的逻辑检查以确保您添加到适当的层次结构等。
public class Class
{
private readonly IList<Animal> animals = new List<Animal>();
public IEnumerable<Animal> Animals
{
get
{
return this.animals;
}
}
public void AddAnimal(Animal animal)
{
if (animal == null)
{
throw new ArgumentNullException("animal");
}
this.animals.Add(animal);
}
//// etc.
}
public class Family
{
private readonly IList<Animal> animals = new List<Animal>();
public IEnumerable<Animal> Animals
{
get
{
return this.animals;
}
}
public void AddAnimal(Animal animal)
{
if (animal == null)
{
throw new ArgumentNullException("animal");
}
this.animals.Add(animal);
}
//// etc.
}
public class Species
{
private readonly IList<Animal> animals = new List<Animal>();
public IEnumerable<Animal> Animals
{
get
{
return this.animals;
}
}
public void AddAnimal(Animal animal)
{
if (animal == null)
{
throw new ArgumentNullException("animal");
}
this.animals.Add(animal);
}
//// etc.
}
public class Animal
{
private readonly Class @class;
private readonly Family family;
private readonly Species species;
public Animal(Class @class, Family family, Species species)
{
if (@class == null)
{
throw new ArgumentNullException("@class");
}
if (family == null)
{
throw new ArgumentNullException("family");
}
if (species == null)
{
throw new ArgumentNullException("species");
}
this.@class = @class;
this.family = family;
this.species = species;
this.@class.AddAnimal(this);
this.family.AddAnimal(this);
this.species.AddAnimal(this);
}
public Class Class
{
get
{
return this.@class;
}
}
public Family Family
{
get
{
return this.family;
}
}
public Species Species
{
get
{
return this.species;
}
}
}