powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О наследовании. Как создать объект унаследованного класса?
17 сообщений из 17, страница 1 из 1
О наследовании. Как создать объект унаследованного класса?
    #38417929
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C# VS 2010
Имеется два класса, один наследник другого:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Class classColumnInfo
{
   public int Width;
   public int Visible;
   //конструктор
   public classColumnInfo()
   { }
}

Class classColumn: classColumnInfo
{
   int ColumnIndex;
   //конструктор
   public classColumn(int index) : base ();
   {
      this.ColumnIndex = index;
   }
   public int Index
   {
      get
      {
         return this.ColumnIndex;
      }
   }
}


Есть заранее созданные объекты базового класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class classMyTable
{
   List<classColumnInfo> ColumnCollection; //он в конструкторе создаётся и инициализируется
   
   //Извне пользователь может запросить информацию о колонке
   public GetColumn(int index)
   {
         //выдаем, но не оригинал, а объект унаследованного класса, 
         //у которого есть доп.поля, например, index
         return new classColumn(index) //и вот как бы сюда правильнее "упаковать" объект базового класса, 
                                                   //т.е. ColumnCollection[index], который уже обёрнут классом classMyTable?
   }



Вопрос: как решаются в реале подобные ситуации?
Конечно же, свойств, полей и пр. в каждом классе куча. Пример упрощённый, схематический
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38417954
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandЕсть заранее созданные объекты базового класса
не делай сегодня то, что можно отложить на завтра
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418116
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что
Код: c#
1.
List<classColumnInfo> ColumnCollection


содержит в себе информацию о каждом из столбцов. И вот, когда пользователь её запрашивает, то хочется ещё выдать к ней в дополнение другую инфу и другие возможности, которые имеются у класса-наследника от classColumnInfo.
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418176
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandДело в том, что
Код: c#
1.
List<classColumnInfo> ColumnCollection


содержит в себе информацию о каждом из столбцов. И вот, когда пользователь её запрашивает, то хочется ещё выдать к ней в дополнение другую инфу и другие возможности, которые имеются у класса-наследника от classColumnInfo.

приведением типа к наследнику. автоматом никак
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418179
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

Код: c#
1.
2.
3.
4.
5.
6.
7.
public GetColumn(int index)
{
    var column = new classColumn(index);
    column.Width = ColumnCollection[index].Width;
    column.Visible = ColumnCollection[index].Visible;
    return column;
}
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418363
Bug69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
public GetColumn(int index)


Что должен возвращать GetColumn? classColumnInfo?
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418383
Bug69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть index?
Если это порядковый номер объекта в коллекции, то это свойство не объекта, а коллекции. У коллекции его и следует спрашивать.
Если же это некий уникальный идентификатор, берущийся откуда-то извне, то разумно предположить, что возникнет необходимость поиска по нему. Тогда лучше хранить экземпляры classColumnInfo не в List<classColumnInfo>, а в Dictionary<int, classColumnInfo>.
В общем, не совсем ясно, какая цель Вами преследуется.
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418480
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bug69
Код: c#
1.
public GetColumn(int index)



Что должен возвращать GetColumn? classColumnInfo?
поправлюсь:
Код: c#
1.
2.
3.
4.
5.
6.
7.
   public classColumn GetColumn(int index)
   {
         //выдаем, но не оригинал, а объект унаследованного класса, 
         //у которого есть доп.поля, например, index
         return new classColumn(index) //и вот как бы сюда правильнее "упаковать" объект базового класса, 
                                                   //т.е. ColumnCollection[index], который уже обёрнут классом classMyTable?
   }


Я, конечно, забыл написать тип, но из return, вроде, всё понятно, что я хочу вернуть.
index - это номер в массиве, вроде, тоже очевидно.

Вопрос можно сформировать так:
Код: c#
1.
2.
3.
4.
5.
classColumn a;
classColumnInfo b;
....
b = (classColumnInfo)a; - это сделать возможно
a = (classColumn)b; - в моём случае именно так сделать и хотелось бы, плюс каким-то образом указать недостающие поля, напр, вызвав конструктор...


Решить это можно только так ( 14930486 ), как указал petlavlik?
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418515
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
a = new ClassColumn(b,arg1,arg2,arg3...);
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418574
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris
Код: sql
1.
a = new ClassColumn(b,arg1,arg2,arg3...);


и из b в a переписывать значения всех полей?
Просто их много и дублирование кода получится... Плюс ещё есть внутренние состояния...
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418578
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправлюсь:

Pallaris
Код: sql
1.
a = new ClassColumn(b,arg1,arg2,arg3...);



и в конструкторе ClassColumn из b в a переписывать значения всех полей?
Просто их много и дублирование кода получится... Плюс ещё есть внутренние состояния...
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418592
Bug69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandindex - это номер в массиве
Тогда свойство Index следует убрать. Оно никак не контролируется данным классом. В коллекции могут удалить впередистоящие члены или, наоборот, вставить еще пару сотен, а данная величина в классе никак не изменится. Для того, чтобы узнать индекс надо обратиться к индексеру коллекции, а не плодить лишние поля-свойства-методы.

Посмотрите, как сделаны таблицы-колонки-строки в .NET Framework! Там все хорошо продумано. Разберитесь и сделайте также. Рефлектор Вам в помощь
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418594
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

нельзя просто так взять и привести объект базового класса к производному
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418599
kmaw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем здесь наследование? что именно решается за счет него?
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418600
Bug69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не решение, а лишь намек на него:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
using System.Collections.Generic;

namespace BlaBlaBla
{
    public abstract class ColumnInfo
    {
        public abstract MyTable Table { get;  }
    }

    public abstract class Column : ColumnInfo
    {
        // Добавляете специфические для данного класса члены. Например, столь полюбившийся Вам индекс...
        public int Index
        {
            get { return Table.Columns.IndexOf(this); }
        }
    }

    public abstract class ColumnCollection : List<ColumnInfo>
    {
        public abstract MyTable Owner { get; }
    }

    public class MyTable
    {
        public MyTable()
        {
            _columns = new ColumnCollectionInternal(this);
        }

        private readonly ColumnCollectionInternal _columns;

        public ColumnCollection Columns
        {
            get { return _columns; }
        }

        public Column CreateColumn()
        {
            return new ColumnInternal(this);
        }

        private class ColumnCollectionInternal : ColumnCollection
        {
            public ColumnCollectionInternal(MyTable owner)
            {
                _owner = owner;
            }

            private readonly MyTable _owner;

            public override MyTable Owner
            {
                get { return _owner; }
            }
        }

        private class ColumnInternal : Column
        {
            public ColumnInternal(MyTable table)
            {
                _table = table;
            }

            private readonly MyTable _table;

            public override MyTable Table
            {
                get { return _table; }
            }
        }
    }
}



За деталями лезте в фреймворк.
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418601
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weylandи в конструкторе ClassColumn из b в a переписывать значения всех полей?

можно сделать, чтоб объект a хранил ссылку на b. У тебя какое-то сомнительное наследование.
...
Рейтинг: 0 / 0
О наследовании. Как создать объект унаследованного класса?
    #38418603
Bug69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И не надо создавать дубликаты, лучше изначально хранить то, чем придется пользоваться.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / О наследовании. Как создать объект унаследованного класса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]