powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Списки констант для наследников
22 сообщений из 22, страница 1 из 1
Списки констант для наследников
    #38309915
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, есть класс, в котором нужно хранить значения каких-либо признаков
Код: c#
1.
2.
3.
4.
5.
6.
7.
public class ArifmethicsOperator
{
      public static int OperatorAdd = 0;
      public static int OperatorSubstract = 1;
      public static int OperatorDivide = 2;
      public static int OperatorMultiply = 3;
}



потом я хочу сделать наследника
Код: c#
1.
2.
3.
4.
5.
6.
public class ArifmethicsAndLogicOperator:Arifmethics
{
      public static int OperatorAND = 4;
      public static int OperatorOR = 5;
      public static int OperatorXOR = 6;
}



В чем неудобство констант - во-первых, в наследниках нужно знать, на какой цифре закончилось определение констант, чтоб правильно продолжить. Во-вторых, в дальнейшей разработке нужно знать хотя бы, с чего начинаются имена констант, чтобы выбрать правильное имя у списка, который выдаст интеллисенс. Энум бы в этом смысле зарулил
Код: sql
1.
OperatorType type_ = OperatorType.Multiply;


только enum нельзя расширить.

Чем вы пользуетесь в случае, если нужно определить набор констант, который требуется расширить в наследнике, при этом соблюсти нумерацию (без копания в коде предка) и получить преимущества интеллисенса?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309924
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisтолько enum нельзя расширить
Поясни.

Бери енум и расширяй его в классе

http://msdn.microsoft.com/en-us/library/vstudio/cc138362.aspx
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[Flags]

enum Days2
{
    None = 0x0,
    Sunday = 0x1,
    Monday = 0x2,
    Tuesday = 0x4,
    Wednesday = 0x8,
    Thursday = 0x10,
    Friday = 0x20,
    Saturday = 0x40
}

class MyClass
{
    Days2 meetingDays = Days2.Tuesday | Days2.Thursday;
}
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309930
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача-то какая?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309949
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПоясни.

Бери енум и расширяй его в классе

enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}



Как к enumu Days2 добавить еще значений в наследнике?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309953
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если под расширением имеется ввиду наследование, то чем не устроил вариант доукомплектования енума новыми членами?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309954
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучЗадача-то какая?

Визуальная система с рисованием. Базовый класс умеет создавать объекты 5 видов. Класс-наследник - еще скажем 5. Создавая в программе экземпляр класса-наследника, я хочу иметь доступ к типам всех 10 объектов.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309957
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЕсли под расширением имеется ввиду наследование, то чем не устроил вариант доукомплектования енума новыми членами?

А как? Я не умею :(
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309968
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisМСУЕсли под расширением имеется ввиду наследование, то чем не устроил вариант доукомплектования енума новыми членами?

А как? Я не умею :(

Руками. Берешь и дописываешь :)

На крайний вариант, можно в енуме ссылаться на член другого енума.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309976
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУPallarisпропущено...


А как? Я не умею :(

Руками. Берешь и дописываешь :)


А, ты в этом смысле. Тоже неудобно - это ж разработчику нужо лезть в базовый класс, его перекомпилиивать. К тому же по логике это не правильно - зачем мне в классе арифм.операций энумы для логических операций?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38309992
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisВизуальная система с рисованием. Базовый класс умеет создавать объекты 5 видов. Класс-наследник - еще скажем 5. Создавая в программе экземпляр класса-наследника, я хочу иметь доступ к типам всех 10 объектов.Ну тут точно не константы нужны.

Не зная всех деталей тяжело что-то советовать, но навскидку как-то так:
Код: 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.
class ShapeInfo
{
    public string Name { get; set; }
}

class Shape
{    
}

interface IShapeFactory
{
    ReadOnlyCollection<ShapeInfo> GetShapes();
    Shape CreateShape(ShapeInfo shapeInfo, ShapeParameters parameters);
}

class PolygonShapeFactory : IShapeFactory
{
    public ReadOnlyCollection<ShapeInfo> GetShapes() 
    {
        return new ... { new Shape { Name = "Triangle" }, new Shape { Name = "Square" }, new Shape { Name = "Rhombus" } ) };
    }
}

class CurveShapeFactory : IShapeFactory
{
    public ReadOnlyCollection<ShapeInfo> GetShapes() 
    {
        return new ... { new Shape { Name = "Circle" }, new Shape { Name = "Ellipse" }, new Shape { Name = "Lens" } ) };
    }
}
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310006
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч,

стринги под такое дело - отстой ИМХО
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310014
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нахлобуч, это полный алес капут.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310033
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallarisстринги под такое дело - отстой ИМХОТут можно и поспорить, но в любом случае нужно вводить некий уникальный идентификатор "формы". Можно использовать GUID, но это не особенно прозрачно. Можно пойти по пути именования пакетов в Java а-ля com.company.product.extensions.shapes.polygon.square.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310045
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisА, ты в этом смысле. Тоже неудобно - это ж разработчику нужо лезть в базовый класс, его перекомпилиивать. К тому же по логике это не правильно - зачем мне в классе арифм.операций энумы для логических операций?
Выноси енумы в отдельную сборку.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310052
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучТут можно и поспорить, но в любом случае нужно вводить некий уникальный идентификатор "формы"..

Вот есть такое (к примеру):

Код: sql
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.
public class DrawSystem
{
      public const int ObjTypeRectangle = 0;
      public const int ObjTypeTriangle = 1;

      public virtual BaseObject CreateObject(int objCode, int x, int y)
     {
           switch (objCode)
           {
                 case (ObjTypeRectangle): return new RectangleObject(x,y);
                 case (ObjTypeTriangle): return new TriangleObject(x,y);
           }
     }
}

public class ExtendedSystem:DrawSystem
{
      public const int ObjTypeCircle = 2;
      public const int ObjTypeEllipse = 3;

      public virtual BaseObject CreateObject(int objCode, int x, int y)
     {
           BaseObject bse_ = base.CreateObject(objCode, x, y);
           if (bse_ != null)
               return bse_;

           switch (objCode)
           {
                 case (ObjTypeCircle ): return new CircleObject(x,y);
                 case (ObjTypeEllipse): return new EllipseObject(x,y);
           }
     }
 
}



со строками сюда не влезешь, т.к. просто не стоит. По-ходу варианта два - либо оставлять вот так, либо сделать единый энум в каком-нибудь внешнем статическом классе, и вместо int objCode писать ObjectFactoryClass.ObjectType.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310053
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

угу, видимо так
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310073
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisМСУ, угу, видимо так
Просто ты сам определись, либо тебе нужна прозрачная и красивая работа с енумами, либо ты хочешь полноценный IoC со всеми вытекающими, причем с подгрузкой плагинов и прочими фишками. Возможно не стоит так всё усложнять и проблема не стоит того?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310082
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisВот есть такое (к примеру):Зачем тут вообще наследование?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310231
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, нашел-таки.

http://www.aosabook.org/en/violet.html :
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310254
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучPallarisВот есть такое (к примеру):Зачем тут вообще наследование?

Надо было привести текста на 100 кб со всей структурой приложения, чтоб стало понятнее?
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310264
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisНадо было привести текста на 100 кб со всей структурой приложения, чтоб стало понятнее?То есть ты уже накропал 100 Кб кода и спрашиваешь, как организовать, фактически, ядро?

Ну да дело хозяйское. Я к тому, что наследование -- самый сильный вид связи (которая coupling); coupling всегда стремятся уменьшать. Плюс, из кода действительно непонятно, какие проблемы решает наследование. У тебя должен быть набор независимых фабрик, ответственных за создание различного вида форм.
...
Рейтинг: 0 / 0
Списки констант для наследников
    #38310277
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НахлобучТо есть ты уже накропал 100 Кб кода и спрашиваешь, как организовать, фактически, ядро?


Кода больше, чем 100 кб. Передавать int или enum - дело незатейливое, и вопрос скорее удобства. Переделывать ядро сильно не нужно для этого, 10 минут хватит.

У тебя должен быть набор независимых фабрик, ответственных за создание различного вида форм.

Я на данном этапе не вижу необходимости создавать отдельный класс только для создания объектов. Все в ядре происходит.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Списки констант для наследников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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