簡體   English   中英

在C#中使用依賴接口從Abstract類繼承的正確方法

[英]Correct way to inherit from Abstract class with dependent interfaces in C#

我有一個用於發送和檢索消息的抽象類。

public abstract class MailClient
{
    public IAuthentication MailAuthentication { get; set; }

    internal MailClient(IAuthentication mailAuthenticaton)
    {
        this.MailAuthentication = mailAuthenticaton;
    }

    public abstract State SendMessage(IMessage message);
    public abstract List<IMessage> GetEmails();
}

我想創建一個具體的類(比如雅虎電子郵件消息)。 因此,我創建了從抽象的Mail客戶端繼承的yahoo客戶端,並使用包含需要發送或接收的消息的詳細信息的YahooMessage對象。

public class YahooClient : MailClient
{
    private YahooConfiguration configuration = new YahooConfiguration();

    public YahooClient (string username, string password) : base(new YahooAuthentication(username, password)) 
    { 
    }

    public override List<YahooMessage> GetMessages()
    {
        //Code for retrieving emails
    }

    public override State SendMessage(YahooMessage message)
    {
        //Code for sending emails
    }
}

YahooMessage實現了IMessage接口,並添加了一些特定於Yahoo的新屬性。

但是,我收到錯誤,因為“SendMessage”和“GetMessages”沒有在Child類(YahooClient)中使用正確的簽名實現。 我使用YahooMessage而不是IMessage來實現IMessage接口。

這顯然是錯誤的做法。 什么是實現所需功能的合適方法?

我會將您的基類定義更改為通用。

public abstract class MailClient<TMessage> where TMessage: IMessage
{
    public IAuthentication MailAuthentication { get; set; }

    internal MailClient(IAuthentication mailAuthenticaton)
    {
        this.MailAuthentication = mailAuthenticaton;
    }

    public abstract State SendMessage(TMessage message);
    public abstract List<TMessage> GetEmails();
}

然后,這將為您提供實現

public class YahooClient : MailClient<YahooMessage>
{
    private YahooConfiguration configuration = new YahooConfiguration();

    public YahooClient (string username, string password) 
        : base(new YahooAuthentication(username, password)) 
    { 
    }

    public override List<YahooMessage> GetMessages()
    {
        //Code for retrieving emails
    }

    public override State SendMessage(YahooMessage message)
    {
        //Code for sending emails
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM