实现多态性:接口与覆盖

时间:2017-11-12 08:55:49

标签: c# interface polymorphism method-overriding

我正在用视频学习C#,我有一个问题。

实现多态性时,通过接口和覆盖实现它有什么区别?

我认为它们在可扩展性方面都很好,因为它们都可以简单地创建一个新类来扩展。

如果我们使用Interface实现多态性,是否有更好的观点? 或者它只取决于具体情况?

任何抽象或理论上的答案都可以。谢谢。

2 个答案:

答案 0 :(得分:1)

如果需要实现类的共享方法或属性,则可以使用抽象类而不是接口。所以,我在下面提供了一个例子。

如您所见,对于两个实现,接口示例 MessageText 方法共享

public interface IMessageSender
{
    void SendMessage();
}
public class EmailSender : IMessageSender
{
    public void SendMessage()
    {
        Console.WriteLine(MessageText());
    }
    private string MessageText()
    {
        return "Message to send !";
    }

}
public class SmsSender : IMessageSender
{
    public void SendMessage()
    {
        Console.WriteLine(MessageText());
    }

    private string MessageText()
    {
        return "Message to send !";
    }
}

您可以将抽象类用于共享方法或此类属性;

public abstract class MessageSender
{
    public abstract void SendMessage();

    protected string MessageText()
    {
        return "Message to send !";
    }
}
public class EmailSender : MessageSender
{
    public override void SendMessage()
    {
        Console.WriteLine(MessageText());
    }

}
public class SmsSender : MessageSender
{
    public override void SendMessage()
    {
        Console.WriteLine(MessageText());
    }
}

答案 1 :(得分:0)

在接口的帮助下,您也可以实现多重继承,而如果使用抽象类和方法重写,则无法实现多重继承C#。更多关于界面的使用将帮助您实现依赖注入(您可以稍后了解它)并减少代码的依赖性。