24

実装クラスが T のリストを実装する必要がある抽象クラスに取り組んでいます。問題は、これが機能しないことです。

public class AbstractClass
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass
{
    public List<Widgets> Items { get; set; }
}

私が見逃している明らかな答えがあると確信しており、リストに入れる抽象基本型を作成できることはわかっていますが、Linq コマンドを使用してリストを作成すると、抽象型 (ItemBase ) は .ToList() メソッドではうまく機能しません。私がやろうとしていることはとてもユニークですか?

4

7 に答える 7

41

タイプが何であるかを知るために、クラスでの宣言も必要Tです。

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public override List<Widgets> Items { get; set; }
}

また、Tを実装する必要があると言うように、Tの可能性を制限することもできますIWidgets

public class AbstractClass<T> where T : IWidgets
于 2010-03-01T22:25:09.110 に答える
10
  • 型 T を宣言する必要があります。
  • クラス AbstractClass を抽象として宣言する必要があります。
  • override キーワードを使用する必要があります。

これを試して:

public class Widgets { }

public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public override List<Widgets> Items { get; set; }
}
于 2010-03-01T22:28:35.373 に答える
6

AbstractClassジェネリックにする必要があります

public class AbstractClass<T> {
  ...
}

public class Container : AbstractClass<Widgets> { ...
}
于 2010-03-01T22:25:27.440 に答える
3
  1. abstract抽象プロパティが含まれているため、AbstractClass をマークする必要があります

  2. 宣言でジェネリック型を指定するAbstractClass

  3. で抽象プロパティを実装するoverride


public abstract class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public override List<Widgets> Items { get; set; }
}

于 2010-03-01T22:37:56.787 に答える
2

あなたはそのようにTを定義する必要があります

public class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widget>
{
    public List<Widgets> Items { get; set; }
}
于 2010-03-01T22:25:52.977 に答える
1

抽象クラスでタイプを指定する必要があります。

public class AbstractClass<T>
{
    public int Id { get; set; }
    public int Name { get; set; }

    public abstract List<T> Items { get; set; }
}

public class Container : AbstractClass<Widgets>
{
    public List<Widgets> Items { get; set; }
}
于 2010-03-01T22:25:41.340 に答える