1つのインターフェースメソッドの異なるタイプの実装

アーニャホープ

私はc#で作業しており、同じインターフェイスを使用する2つのクラスを実装しようとしています。どちらのクラスも、それぞれ1つのメソッドのみを必要とします。ただし、2つのメソッドは、異なるパラメーターを使用して、異なるタイプである必要があります。インターフェイスから1つのメソッドを継承し、各クラスでそれを上書きできるようにしたいと思います。これは、すてきできれいなためです(インターフェイスはプログラム機能(依存性注入を使用)に必要です)残念ながら、両方のクラスも必要です。メール送信者クラスは他のプログラムで繰り返し使用されるためです。

私はALMOSTが私の問題に適合する解決策を見つけました、それは次のとおりです:インターフェースからメソッドを実装するが、異なるパラメーターを使用する

私が持っている違いは、2つのクラスのそれぞれが1つのメソッドのみを呼び出す必要があるということです。

これが現状の私のコードです(前のソリューションでジェネリックを実装しようとしました):

interface IEmailSender<T>
{
     T DoEmail();
}

public class EmailGenerator : IEmailSender<MailMessage>
{
     public override MailMessage DoEmail(string emailAddress)
     {
         MailMessage message = new MailMessage();
         //code to generate email message
         return message;
     }
}

public class EmailSender : IEmailSender<bool>
{
    public override bool DoEmail(MailMessage message)
    {
        //code to send email
        return true;
    }
}

理想的には、メール送信者メソッドを無効にしたいのですが、戻り値が必要な場合はブール値を返してもかまいません。

それが理にかなっていることを願って、私は文字通りここできちんとしようとしています。なぜなら、現在それを機能させるには、インターフェイスに2つのメソッドがあり、各クラスが空のメソッドを呼び出す必要があるからです。

前もって感謝します、

フィリップピトル

アーキテクチャが貧弱なために苦労しているようです。EmailGeneratorではありませんIEmailSenderとして使用する場合はありませんIEmailSender

私はこれをお勧めします:

interface IEmailGenerator{
    MailMessage BuildMailMessage(string message)
}

interface IEmailSender
{
    void SendEmail(string message);
}

public class EmailGenerator : IEmailGenerator{
     public MailMessage BuildMailMessage(string message)
     {
          return new MailMessage();
     }
}

public class EmailSender : IEmailSender
{
     private readonly IEmailGenerator _emailGenerator;

     public EmailSender (IEmailGenerator emailGenerator){
        _emailGenerator = emailGenerator;
     }

     public void SendEmail(string message)
     {
          var message = _emailGenerator.BuildMailMessage(message);

          //send email
     }
}

このようにして、電子メールの送信と電子メールの生成の違い(および懸念事項)を明確に分離しました。DIを使用して、すべてを一緒に配線できます。

class Consumer{
    private IEmailSender _emailSender;

    Consumer(IEmailSender emailSender){ _emailSender = emailSender;}

    void Method()
    {
        string msg = "Hello Wolrd!"
        _emailSender.SendEmail(msg);
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java-異なるメソッドで2つのインターフェースを実装する

分類Dev

Javaは、1つのインターフェースを使用して2つのクラスに異なるメソッドを実装します

分類Dev

異なるメソッド名を使用したインターフェースの実装

分類Dev

CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

分類Dev

匿名クラスのインターフェースからメソッドを1つだけ実装する

分類Dev

異なるメソッドとプロパティを持つ1つのインターフェイスからの異なるオブジェクト

分類Dev

Javaインターフェースのメソッド実装のラップ

分類Dev

メソッドシグネチャが同じで戻り値の型が異なる2つのインターフェイスを実装する

分類Dev

インターフェイスメソッドではないメソッドの実装を防止する

分類Dev

同じメソッド名を持つ2つのインターフェース-メソッドの実装

分類Dev

同じメソッド名を持つ2つのインターフェース-メソッドの実装

分類Dev

2つの異なるインターフェイスの2つのメソッドで同じ名前、1つの実装ではないのはなぜですか?

分類Dev

インターフェイスメソッドのサブタイプを実装するJava

分類Dev

インターフェースを実装するクラスのコピーメソッドの実装-Java

分類Dev

Java 8は1つのインターフェースを使用して別のインターフェースにメソッドを実装します

分類Dev

インターフェイスの実装中のメソッドの制限

分類Dev

Goおよびインターフェイスとの依存関係が異なる可能性がある同じメソッドの複数の実装

分類Dev

2つの異なる実装とのインターフェース

分類Dev

同じメソッドを持つ複数のインターフェースを実装する

分類Dev

インターフェースの静的メソッドの実装

分類Dev

インターフェイスの実装されていないメソッドのエラーなし

分類Dev

Autofacの1つのインターフェースに異なる実装を使用する

分類Dev

2つの異なるインターフェース実装内の重複コード

分類Dev

1つのインターフェースのメソッドを異なるSqlSessrionsにバインドする方法

分類Dev

C#-1つのインターフェイス、2つの実装:メソッド呼び出しを1つの実装から別の実装にリダイレクトする方法は?

分類Dev

プライベートインターフェイスメソッドの実装が受け入れられるのはなぜですか?

分類Dev

プライベートインターフェイスメソッドの実装が受け入れられるのはなぜですか?

分類Dev

「匿名」メソッドを使用したインターフェースの実装

分類Dev

Kotlin-1つの2メソッドインターフェイスを2つの異なる1メソッドインターフェイスに置き換えます

Related 関連記事

  1. 1

    Java-異なるメソッドで2つのインターフェースを実装する

  2. 2

    Javaは、1つのインターフェースを使用して2つのクラスに異なるメソッドを実装します

  3. 3

    異なるメソッド名を使用したインターフェースの実装

  4. 4

    CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

  5. 5

    匿名クラスのインターフェースからメソッドを1つだけ実装する

  6. 6

    異なるメソッドとプロパティを持つ1つのインターフェイスからの異なるオブジェクト

  7. 7

    Javaインターフェースのメソッド実装のラップ

  8. 8

    メソッドシグネチャが同じで戻り値の型が異なる2つのインターフェイスを実装する

  9. 9

    インターフェイスメソッドではないメソッドの実装を防止する

  10. 10

    同じメソッド名を持つ2つのインターフェース-メソッドの実装

  11. 11

    同じメソッド名を持つ2つのインターフェース-メソッドの実装

  12. 12

    2つの異なるインターフェイスの2つのメソッドで同じ名前、1つの実装ではないのはなぜですか?

  13. 13

    インターフェイスメソッドのサブタイプを実装するJava

  14. 14

    インターフェースを実装するクラスのコピーメソッドの実装-Java

  15. 15

    Java 8は1つのインターフェースを使用して別のインターフェースにメソッドを実装します

  16. 16

    インターフェイスの実装中のメソッドの制限

  17. 17

    Goおよびインターフェイスとの依存関係が異なる可能性がある同じメソッドの複数の実装

  18. 18

    2つの異なる実装とのインターフェース

  19. 19

    同じメソッドを持つ複数のインターフェースを実装する

  20. 20

    インターフェースの静的メソッドの実装

  21. 21

    インターフェイスの実装されていないメソッドのエラーなし

  22. 22

    Autofacの1つのインターフェースに異なる実装を使用する

  23. 23

    2つの異なるインターフェース実装内の重複コード

  24. 24

    1つのインターフェースのメソッドを異なるSqlSessrionsにバインドする方法

  25. 25

    C#-1つのインターフェイス、2つの実装:メソッド呼び出しを1つの実装から別の実装にリダイレクトする方法は?

  26. 26

    プライベートインターフェイスメソッドの実装が受け入れられるのはなぜですか?

  27. 27

    プライベートインターフェイスメソッドの実装が受け入れられるのはなぜですか?

  28. 28

    「匿名」メソッドを使用したインターフェースの実装

  29. 29

    Kotlin-1つの2メソッドインターフェイスを2つの異なる1メソッドインターフェイスに置き換えます

ホットタグ

アーカイブ