Closed. This question needs to be more focused。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,使其仅通过editing this post专注于一个问题。
                        
                        3年前关闭。
                                                                                            
                
        
我喜欢C#,但找不到解决方案。这显然是一种简化。

假设我们有动物,狗,猫,家具,椅子,TallDog类。

动物有个名字。家具有高度。

但。突然出现了TallDog。它有一个名字和一个高度。

您如何避免在TallDog和Furniture中重复高度?

abstract class Animal
{
    public string Name { get; set; }
    public Animal(string name)
    {
        Name = name;
    }
}
class Dog : Animal
{
    public Dog(string name)
        : base(name)
    {

    }
}
class Cat : Animal
{
    public Cat(string name)
        : base(name)
    {

    }
}
abstract class Furniture
{
    public int Height { get; set; }
    public Furniture(int height)
    {
        Height = height;
    }
}
class Chair : Furniture
{
    public Chair(int height)
        : base(height)
    {

    }
}
class TallDog : Animal
{
    public int Height { get; set; }
    public TallDog(string name, int height)
        : base(name)
    {
        Height = height;
    }
}

最佳答案

您应该记住,“好的OO”主要是关于对象的行为。存在对象(和类)以将某些“概念脱离现实”映射到您作为应用程序基础的“模型”中。

因此:您不使用继承在此处或此处保存一行代码。您将“ B扩展A”标签放在B上是因为在模型的指导下这样做是合理的。

有鉴于此:对于完全错误的原因,使用继承的人来说,您的想法就是将高脚狗当作家具!

因此:只需忘掉这个想法即可;并按照注释中的建议进行操作:创建合理的接口,并将这些类放在有意义的位置。

10-02 02:27