C# でパラメーター化されたプロパティを実装するために使用できるジェネリック クラスを作成したいと考えています。私が欲しい基本的なコードはこれです:
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn oReturn = default(typeReturn);
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
しかし、typeReturn
未知/無制限であるため、コンパイラは行にプロットしていoReturn[oIndexer]
ます。
では、どうすればこれを機能させることができますか?私の最初の(まあ、2番目の)考えは、リフレクションを使用して条件付きでインデクサーを見つける(見つからない場合はエラーを発生させる)かwhere typeReturn: I???
、クラス定義で修飾子を使用することです。しかし、修飾子を使用すると、どうなるでしょI???
うか?
この問題の解決策をありがとう!
注: リフレクションを介してインデクサーを正しく見つける方法は、(おそらく) http://www.dotnet247.com/247reference/msgs/3/16665.aspx (最後のメッセージを参照) にあります。
編集:マシューが以下で指摘したように...私は元の説明にタイプミス/バグのようなものがあります...私自身のせいです、本当に...もともと寝る直前にこれを書いていました!私が望むコードは、次のようになります。
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn[] oReturn;
public ParameterizedProperty(typeReturn[] oSource) {
oReturn = oSource;
}
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
...そして、あなたはそれがうまくいくと思いますか!?
ええと、そうではありません!(「int-able」型が欲しい) という不満はまだtypeIndexer
ありますが、はるかに優れています! また、厄介な「oReturnを実際に何にも設定できない」問題を解決するためにコンストラクターを追加しました=)
しかし、これでも正しく見えません (配列は常に INT によってインデックス付けされますよね? そうであれば、typeIndexer は必要ありません)... 明日の作業でもう一度確認する必要があります =)