Я работаю над абстрактным классом, где класс с реализацией должен реализовать список 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 () метод. То, что я пытаюсь сделать настолько уникальный?
Вам также необходимо объявление в классе, чтобы знать, что это за тип 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 List<Widgets> Items { get; set; }
}
Вы также можете ограничить то, чем может быть T, например, скажем, что он должен реализовывать IWidgets
:
public class AbstractClass<T> where T : IWidgets
Вам нужно отметить AbstractClass abstract
, потому что он содержит абстрактное свойство
Укажите универсальный тип в AbstractClass
объявление
Реализовать абстрактное свойство с переопределением
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; }
}
Вам нужно сделать AbstractClass
универсальным
public class AbstractClass<T> {
...
}
public class Container : AbstractClass<Widgets> { ...
}
Вам нужно указать тип в абстрактном классе:
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; }
}
Вам нужно определить 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; }
}
Попробуйте следующее:
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; }
}