小编Mar*_*ans的帖子

如何避免强制转换派生类型-违反Liskov原则

我想避免使用将基类类型转换为派生类类型的方法,我可以成功完成此操作。

我已经编写了代码来演示我已经尝试过的内容。

public abstract class Animal : IAnimal
{
    public void Move()
    {        
    }
}

public interface IAnimal
{
     void Move();
}

public interface IDog:IAnimal
{
    void bark();
}

public class Dog : IDog
{
    public void Move()
    {

    }

    public void bark()
    {

    }
}

static void Main(string[] args)
{
    Animal animal = null;
    IDog dog = animal as IDog;

    dog.bark(); // can access specialized method

    IAnimal puppy = new Dog();
    puppy.Move(); // can only access generic functions    
} …
Run Code Online (Sandbox Code Playgroud)

c# liskov-substitution-principle solid-principles

0
推荐指数
1
解决办法
96
查看次数