1

私はここでひっくり返りそうです

私がやろうとしているのは、さまざまな種類のチケットで機能するちょっとしたファクトリーを作成することです。そこで、次のような署名を持つ ITicket インターフェイスを作成しました。

GetOpen(); 
GetById(int id);

これらのメソッドは、同じチケット タイプのインスタンスまたはインスタンスのリストを返す必要があるため、インターフェイスを次のようにすると思いました。

List<ITicket> GetOpen();
ITicket GetById(int id);

したがって、実際には、次のようなファクトリ メソッドを作成したいと考えています。

public static List<ITicket> GetOpen(ITicket ticket)
{
   return ticket.GetOpen();
}

たとえば、クラス MocRequest に戻り、次のように List GetOpen() メソッドを実装しました。

public List<MocRequest> GetOpen()
{
   //implementation grabs a bunch of MocTickets out of the database 
   and converts them into instances of the MocTicketClass and returns them
}

戻り値の型が ITicket ではなく MocRequest であるため、これは有効な実装ではないというエラーが表示されます。この段階では、MocRequest は ITicket であると考えていましたが、後から考えると、少し循環的で機能しないと思います。戻り値の型は、引き続き使用できるように MocRequest である必要があります。

インターフェイスをより似ITicket<T>たものにすることを実験しましたが、それでもファクトリでチケットクラスタイプを指定する必要があり、目的に反します。

したがって、ここでの目的は、この処理を処理する単一の静的メソッドをファクトリに作成することでした。私はこれを正しい方法で行っていますか?どうすればこれを機能させることができますか? それとも、それらを処理するための複数のメソッドを作成するのにまだ行き詰まっていますか? ティア

4

1 に答える 1

1

MocRequestかもしれませんが、それはa にはなりITicketません。List<MocRequest>List<ITicket>

aが期待されるList<MocRequest>場所に aを返すと、API のユーザーは結果のリストを使用して、a ではないを追加する可能性があります。その場合はどうするのですか?壊れますよね?List<ITicket>ITicketMocRequestList<MocRequest>

したがって、コンパイラは . を返すことを要求しますList<ITicket>

List<T>内部の何かのコピーを返すのか、実際の内部リストへの参照を返すのかが明確でないため、一般に、を返すことはお勧めできません。戻り値の型を として宣言するIEnumerable<ITicket>ことをお勧めします。これは基本的に、書き込み可能なリスト オブジェクトではなく、チケットを返すことを意味します。(API のユーザーは、それらのチケットを自分のリストに自由に挿入できます。)

列挙を返す方法の詳細については、DB からフェッチされた後にチケットがどのように見えるかについての詳細を取得する必要があります。それらはリストにありますか、それともそのリストを作成しますか?

于 2012-07-02T18:27:05.740 に答える