インターフェイスの基本プロパティを作成し、派生したもので実装するにはどうすればよいですか?

avivgood2

チャットアプリを作成しています。チャットでは、ユーザーは画像、ファイル、テキストメッセージの3種類のメッセージを送信できます。IMessege3つのクラスプロパティを含むと呼ばれるインターフェイスを作成しようとしています

interface IMessege
    {
        object content { get; }
        User sender { get; }
        DateTime sent { get; }
    }

それから私は3つのクラスにインターフェースを実装する:FileMessegeImageMessegeStringMessege私はそれらすべてを持っているしたいUser senderDateTime sent、しかし、content私はタイプからになりたいstringStringMessegeタイプから、fileFileMessege等...

これらのクラスはすべてから継承しているので、これが問題になるとは思いませんでしたobjectが、明らかに問題はあります。

どうすればいいですか?

ジョンスキート

(両方のオプションの名前を慣用的なC#に変更しました。)

オプション1:コンテンツのタイプでIMessageを一般的にする

interface IMessage<TContent>
{
    TContent Content { get; }
    User Sender { get; }
    DateTime Sent { get; }
}

public class FileMessage : IMessage<File>
{
   ...
}

public class StringMessage : IMessage<string>
{
   ...
}

// etc

利点:常に強く型付けされている
欠点:(たとえば)を持つことができなくなりましたList<IMessage>非ジェネリック部分とジェネリック部分を分離することで、これを軽減できます。

interface IMessage
{
    User Sender { get; }
    DateTime Sent { get; }
}

interface IMessage<TContent> : IMessage
{
    TContent Content { get; }
}

オプション2:明示的なインターフェース実装を使用する

interface IMessage
{
    object Content { get; }
    User Sender { get; }
    DateTime Sent { get; }
}

public class FileMessage : IMessage
{
    // Explicit interface implementation of the object-typed Content property 
    object IMessage.Content => Content;

    // Regular strongly-typed property for Content
    public File Content { get; }

    // Other interface properties
}

// etc

利点:ジェネリックスの必要がない
欠点:インターフェイスを使用するときのコンテンツへの弱い型のアクセス、および少し複雑なコード。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

明示的に実装されたインターフェースのプロパティを設定するにはどうすればよいですか?

分類Dev

インターフェイスを実装する基本クラスから派生したインスタンスのリストを作成するにはどうすればよいですか?

分類Dev

WinRTで、インターフェイスを実装するプロパティを反映するにはどうすればよいですか?

分類Dev

パブリックプロパティでプライベートセットメソッドを使用して複数のインターフェイスを実装するにはどうすればよいですか?

分類Dev

ネイティブC ++のCOMを使用してC#のインターフェイスを実装するにはどうすればよいですか?

分類Dev

一部の基本タイプまたはインターフェイスに存在しないプロパティをJsonConvert.PopulateObjectから除外するにはどうすればよいですか?

分類Dev

子クラスにインターフェイスプロパティを実装するにはどうすればよいですか?

分類Dev

インターフェイスの匿名実装を作成するにはどうすればよいですか?

分類Dev

可変数のプロパティを使用してTypeScriptインターフェイスを宣言するにはどうすればよいですか?

分類Dev

文字列としてのTypescriptプロパティ、インターフェイスを取得するにはどうすればよいですか

分類Dev

基本クラスで静的インターフェイスを定義し、インターフェイスを派生クラスに実装する必要があることを確認するにはどうすればよいですか?

分類Dev

異なるクラスに対して1つのインターフェイス実装を作成するにはどうすればよいですか?

分類Dev

タイプによって実装されているインターフェイスを正しくチェックするためのフローを取得するにはどうすればよいですか?

分類Dev

いくつかのプロパティをタイプチェックするだけでなく、プロパティを許可するTypescriptインターフェイスを作成するにはどうすればよいですか?

分類Dev

基本クラスのインスタンスから派生クラスのインスタンスを作成し、プライベートフィールドを含めるにはどうすればよいですか?

分類Dev

インターフェイスの実装クラスのタイプパラメータを設定するにはどうすればよいですか?

分類Dev

C#実装されたインターフェイスに存在しないオブジェクトプロパティにアクセスするにはどうすればよいですか

分類Dev

TypeScriptでインターフェイスプロパティのタイプを取得するにはどうすればよいですか?

分類Dev

jenkinsパイプラインステージの実行をパラメータから派生した特定のノードエージェントに転送するにはどうすればよいですか?

分類Dev

既存のプロパティのTypeScriptインターフェイスにエイリアスを追加するにはどうすればよいですか?

分類Dev

フィールドの関数型インターフェースの実装を作成するにはどうすればよいですか?

分類Dev

実装への依存関係を作成せずに、インターフェイスの実装を使用するにはどうすればよいですか?

分類Dev

インターフェイスのすべてのプロパティの型を定義するにはどうすればよいですか?

分類Dev

エクステンダープロバイダーを介して実装されたプロパティにデザイン時の説明を追加するにはどうすればよいですか?

分類Dev

JSONデータを使用してGoogleグラフのスタイルまたはプロパティを実装するにはどうすればよいですか?

分類Dev

プロパティがインターフェイスの一部であることを保証するにはどうすればよいですか?

分類Dev

インターフェイスをクラスプロパティとして定義するにはどうすればよいですか?

分類Dev

関数のプロパティを公開せずに関数インターフェイスを宣言するにはどうすればよいですか

分類Dev

変更できないクラスを作成してインターフェイスを実装するにはどうすればよいですか?

Related 関連記事

  1. 1

    明示的に実装されたインターフェースのプロパティを設定するにはどうすればよいですか?

  2. 2

    インターフェイスを実装する基本クラスから派生したインスタンスのリストを作成するにはどうすればよいですか?

  3. 3

    WinRTで、インターフェイスを実装するプロパティを反映するにはどうすればよいですか?

  4. 4

    パブリックプロパティでプライベートセットメソッドを使用して複数のインターフェイスを実装するにはどうすればよいですか?

  5. 5

    ネイティブC ++のCOMを使用してC#のインターフェイスを実装するにはどうすればよいですか?

  6. 6

    一部の基本タイプまたはインターフェイスに存在しないプロパティをJsonConvert.PopulateObjectから除外するにはどうすればよいですか?

  7. 7

    子クラスにインターフェイスプロパティを実装するにはどうすればよいですか?

  8. 8

    インターフェイスの匿名実装を作成するにはどうすればよいですか?

  9. 9

    可変数のプロパティを使用してTypeScriptインターフェイスを宣言するにはどうすればよいですか?

  10. 10

    文字列としてのTypescriptプロパティ、インターフェイスを取得するにはどうすればよいですか

  11. 11

    基本クラスで静的インターフェイスを定義し、インターフェイスを派生クラスに実装する必要があることを確認するにはどうすればよいですか?

  12. 12

    異なるクラスに対して1つのインターフェイス実装を作成するにはどうすればよいですか?

  13. 13

    タイプによって実装されているインターフェイスを正しくチェックするためのフローを取得するにはどうすればよいですか?

  14. 14

    いくつかのプロパティをタイプチェックするだけでなく、プロパティを許可するTypescriptインターフェイスを作成するにはどうすればよいですか?

  15. 15

    基本クラスのインスタンスから派生クラスのインスタンスを作成し、プライベートフィールドを含めるにはどうすればよいですか?

  16. 16

    インターフェイスの実装クラスのタイプパラメータを設定するにはどうすればよいですか?

  17. 17

    C#実装されたインターフェイスに存在しないオブジェクトプロパティにアクセスするにはどうすればよいですか

  18. 18

    TypeScriptでインターフェイスプロパティのタイプを取得するにはどうすればよいですか?

  19. 19

    jenkinsパイプラインステージの実行をパラメータから派生した特定のノードエージェントに転送するにはどうすればよいですか?

  20. 20

    既存のプロパティのTypeScriptインターフェイスにエイリアスを追加するにはどうすればよいですか?

  21. 21

    フィールドの関数型インターフェースの実装を作成するにはどうすればよいですか?

  22. 22

    実装への依存関係を作成せずに、インターフェイスの実装を使用するにはどうすればよいですか?

  23. 23

    インターフェイスのすべてのプロパティの型を定義するにはどうすればよいですか?

  24. 24

    エクステンダープロバイダーを介して実装されたプロパティにデザイン時の説明を追加するにはどうすればよいですか?

  25. 25

    JSONデータを使用してGoogleグラフのスタイルまたはプロパティを実装するにはどうすればよいですか?

  26. 26

    プロパティがインターフェイスの一部であることを保証するにはどうすればよいですか?

  27. 27

    インターフェイスをクラスプロパティとして定義するにはどうすればよいですか?

  28. 28

    関数のプロパティを公開せずに関数インターフェイスを宣言するにはどうすればよいですか

  29. 29

    変更できないクラスを作成してインターフェイスを実装するにはどうすればよいですか?

ホットタグ

アーカイブ