Добавить списки в другой класс списков

В моем коде есть 3 класса (a, b, c), которые (b, c) наследуют классы a. и у меня есть список (список mylist). Моя проблема заключается в добавлении к элементу из класса b или класса c

public class A
{
    public int x;
    public int y;
    public A(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

public class B : A
{
    public int z;
    public B(int x, int y, int z) : base(x, y)
    {

    }
}

class Program
{
    static void Main(string[] args)
    {
        var myA = new List<A>();
        myA.Add(new A(1, 2));
        myA.Add(new B(3, 4, 5));
        Console.WriteLine(myA[1]); 
        Console.WriteLine("0.x = " + myA[0].x + "--0.y = " + myA[0].y);
        Console.WriteLine("1.x = " + myA[1].x + "--1.y = " + myA[1].y + "--1.z = ");// I can't see myA.z 
    }
}

Возможный дубликат C# — список различных типов объектов

Tasha R 07.04.2019 22:06

Это недопустимый синтаксис C#. Пожалуйста, предоставьте реальный код.

Olivier Jacot-Descombes 07.04.2019 22:08

Не считая того факта, что ваш код не компилируется, все элементы в mylist относятся к типу a, что означает, что вы сможете получить только .x. Для доступа к любым другим свойствам в производных классах вам нужно будет привести элемент списка к связанному объекту, например. as b для доступа .y и так далее. Более того, вам, вероятно, нужно сделать свойства класса public , чтобы они были видны извне.

Mihai 07.04.2019 22:16

Я обновил свой код.

Doğukan Gözen 08.04.2019 00:01
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
189
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я удалил свой прежний ответ, так как вы много обновили вопрос.

Причина, по которой вы не видите это свойство, заключается в том, что (как упоминалось в комментарии) список содержит только «контракт», содержащий экземпляры класса A. Даже если он также содержит производные классы (например, класс B), он все равно не может получить доступ к свойствам B, потому что мы можем быть «уверены» только в том, что элементы внутри списка содержат, по крайней мере, все поведение и свойства класса. A.

Это сделано для того, чтобы мы не могли случайно попытаться получить доступ к несуществующему свойству экземпляра A во время выполнения.

Другие вопросы по теме