У меня есть абстрактный класс Izdanie
, от которого наследуются классы Kniga
и Journal
. От Kniga
наследуется класс Uchebnik
.
Как мне правильно прописать List чтобы в нем можно было хранить объекты всех этих классов (Кроме абстрактного, само собой)? И как прописать вызов. Чтобы иметь возможность иметь доступ к полям и вызывать методы.
P.S. метод прописан в абстрактном классе и переопрелеляется в дочерних классах.
Как мне правильно прописать List
чтобы в нем можно было хранить
объекты всех этих классов
Просто объявляете List
для базового класса и всё. Тогда в него можно будет размещать объекты любого из классов наследников.
И как прописать вызов. Чтобы иметь возможность иметь доступ к полям и вызывать методы. P.S. метод прописан в абстрактном классе и переопрелеляется в дочерних классах.
Это уже зависит от того, что включают в себя базовый класс и наследники и, что представляют собой эти методы.
В крайнем случае никто не запрещает объявить List
для конкретного наследника или, на худой конец, привести типы.
Объявление будет вида:
public void SomeMethod<T>(List<T> IzdList) where T : Izdanie
Пример использования:
class Program
{
public static void ShowDescriptions<T>(List<T> IzdList) where T : Izdanie
{
foreach (var izdanie in IzdList)
Console.WriteLine(izdanie.GetDescription());
}
static void Main(string[] args)
{
List<Izdanie> listIzdanie = new List<Izdanie>();
Kniga k1 = new Kniga();
k1.name = "Книга 1";
k1.publisher = "Издатель 1";
k1.year = 2017;
listIzdanie.Add(k1);
Uchebnik u1 = new Uchebnik();
u1.name = "Учебник 1";
u1.publisher = "Издатель 2";
u1.year = 2016;
u1.author = "Автор 1";
listIzdanie.Add(u1);
ShowDescriptions(listIzdanie);
}
}
public abstract class Izdanie
{
public string name { get; set; }
public string publisher { get; set; }
public int year { get; set; }
public virtual string GetDescription()
{
return "Name: " + this.name + " Published: " + this.publisher + " in " + this.year.ToString();
}
}
public class Kniga : Izdanie
{
public override string GetDescription()
{
return "Name: " + this.name + " Published: " + this.publisher;
}
}
public class Uchebnik : Izdanie
{
public string author { get; set; }
public override string GetDescription()
{
return "Name: " + this.name + " Published: " + this.publisher + " Author: " + this.author;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
ЗдравствуйтеПосле обработки данных на сервере данные выводятся в Repeater, который выглядит следующим образом:
Как можно при наведении мыши на кнопку перемещать ее (так же, только еще в обратную сторону нужно)? Этот код криво справляетсяТ
У меня есть две кнопки в DataTemplateНужно привязать их к свойству типа int так, что бы по нажатию одной кнопки переменная увеличивалась, по другой...
Например у меня есть сервисы ScannerService и UsersServiceПервый отвечает за управление сканером на устройстве, второй получает данные из базы данных...