继承或标识符

Lin*_*ina 6 c# java inheritance

这里有没有人有关于何时用户继承以及何时使用标识符的意见?

继承示例:

class Animal 
{
    public int Name { get; set; }
}

class Dog : Animal {}

class Cat : Animal {}
Run Code Online (Sandbox Code Playgroud)

标识符示例:

class Animal 
{
    public int Name { get; set; }

    public AnimalType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在什么情况下我应该选择哪种解决方案以及它们的优缺点是什么?

/丽娜

And*_*zub 6

这取决于您需要在系统中执行的操作类型.例如,如果您有一些常见的操作应该以不同的方式为每个对象完成,那么应该使用继承,例如:

class Shape 
{
    public abstract void Draw();
}

class Circle : Shape 
{
    public override void Draw()
    { 
        /* Custom implementation for Circle. */
    }
}

class Box : Shape 
{
    public override void Draw()
    { 
        /* Custom implementation for Box. */
    }
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果某些类型和对象更像它的属性,你应该使用你所谓的"标识符":

enum Color
{
    Red,
    Green,
    Blue
}

class Box
{
    public Color BoxColor { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里使用继承(但它看起来不太好):RedBox,BlueBox等.区别在于所有盒子(甚至是不同颜色的盒子)都会以相同的方式处理,它们的行为也很常见.


Mne*_*nth 2

如果继承类(示例中的 Cat 和 Dog)具有不同的接口(方法或字段),或者它们用于选择不同的行为,我会使用继承。例如,在实际项目中,我有一个用于生成 HTML 代码的基类。根据情况,我创建正确的子类,生成正确的 HTML。这些类具有(大部分)相同的接口,但它们的行为非常不同,我不想通过 if 或 switch 选择它。