0

Using the generic type GetOption<EnumT>requires 1 type argumentというエラーが表示されます。エラーは、継承元の最初の行から発生していますList<GetOption>

基本オブジェクトですべての処理を実行し、詳細を子オブジェクトに格納できる継承構造をセットアップしようとしています。子オブジェクトの数は N 個です。基本オブジェクトは、インスタンス化時に子の型を通知する必要があります。

最も親のクラスは List から継承されるため、最も親のオブジェクトにリストの機能を持たせて、インスタンス化時に型が通知される一般的な子を追加できます。

これが私がこれまでに持っているものです:

最初の 2 つのクラスは基本クラスです。

public abstract class GetOptions : List<GetOption>
{
    public enum FilterDirections
    {
        Ascending,
        Descending
    }

    private FilterDirections _filterDirection;

    public FilterDirections FilterDirection
    {
        get { return _filterDirection; }
        set { _filterDirection = value; }
    }

    public GetOptions()
    {
        FilterDirection = FilterDirections.Ascending;
    }
}

public abstract class GetOption<EnumT>
{
    private EnumT _column;

    public EnumT Column
    {
        get { return _column; }
        set { _column = value; }
    }

    public GetOption()
    {

    }
}

最後の 2 つのクラスはサンプルの子クラスです

public class PersonTypeLookupGetOptions : GetOptions
{
    public PersonTypeLookupGetOptions() : base() { }
}

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>
{

}

自分がやろうとしていることをどのように達成できますか?

編集:

私がやろうとしているのは、子オブジェクトで継承しているリスト内のオブジェクトのタイプを定義することです。

最初の質問の下のコメントで、必要な解決策にたどり着くことができました。クラスの定義は次のとおりです。

public abstract class GetOptions<ChildT, EnumT> : List<ChildT> where ChildT : GetOption<EnumT>

public abstract class GetOption<EnumT>

public class PersonTypeLookupGetOptions : GetOptions<PersonTypeLookupGetOption, PersonTypeLookup.PersonTypeLookupFields>

public class PersonTypeLookupGetOption : GetOption<PersonTypeLookup.PersonTypeLookupFields>
4

2 に答える 2

2

何をしようとしているのかは明確ではありませんが、ジェネリックパラメーターをコレクション型に伝播することが役立つ場合があります。

public abstract class GetOptions<EnumT> : List<GetOption<EnumT>>

最も親のクラスは List から継承されるため、実行時にタイプが通知される一般的な子を追加するために、最も親のオブジェクトにリストの機能を持たせることができます

ジェネリックは実行時ではなくコンパイル時にバインドされることに注意してください。

于 2013-04-09T15:47:27.117 に答える
0

List<GetOption>あなたのより大きな問題の解決策はわかりませんが、あなたのエラーはコンパイラが期待しているときにあなたが使用しているためだと確信していますList<GetOption<EnumT>>。そうは言っても、あなたがここで何をしようとしているのか、私にはよくわかりません...

編集:部分GetOptionのないクラスになりたいだけで<EnumT>、から継承したいようですList<GetOption>。そのため、基本クラスをGetOption代わりに変更するとGetOption<EnumT>、問題が解決する場合があります。

于 2013-04-09T15:48:07.747 に答える