powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запретить создание экземпляров базового не абстрактного класса
18 сообщений из 18, страница 1 из 1
Запретить создание экземпляров базового не абстрактного класса
    #38458996
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такая задачка.
Класс нельзя пометить, как abstract (by design), но и создавать экземпляры нужно позволить только его наследникам.

Как это сделать меньшей кровью?
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459013
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
конструктор, который можно увидеть из наследника, но нельзя видеть снаружи..не
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиhVostt,
конструктор, который можно увидеть из наследника, но нельзя видеть снаружи..не

protected ctor?

активатором тоже нельзя создать?
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459041
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Да нет, в ативаторе в любом случае, алокаци будет через new, а там за ней конструктор ( если видимый)
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459043
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиhVostt,
Да нет, в ативаторе в любом случае, алокаци будет через new, а там за ней конструктор ( если видимый)

ну тогда спасибо! вопрос закрыт
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459044
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttактиватором тоже нельзя создать?
все замки - защищают только от честных людей
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459045
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя стоит поэкспериментировать, может там какие ошметки застревают в куче,..
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459047
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилвсе замки - защищают только от честных людей

просто наличие экземпляра базового объекта потенциально может серьёзно повредить работе системы. но и абстрактным класс тоже нельзя сделать, незнаю встречалось ли кому-нибудь подобная задача. речь идёт не о синглетоне.

Где-то в степихотя стоит поэкспериментировать, может там какие ошметки застревают в куче,..

в смысле какие ошмётки, от чего?
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459051
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
я не смотрел кишки, но если предположить что идет выделение памяти а потом попытка вызова конструктора,
который не доступен, в итоге получаем обьект на удаление в куче.
но скорее всего идет проверка на доступность конструктора, а потом выделение ( было бы жирно разбрасываться)
есть такие ситуации, когда пример Foo foo=new Foo(); в конструкторе ошибка, хоть и мы ее словим, и наружу нам не выкинет
указатель на созданный обобьет, но объект хоть и не доделанный, останется в куче на удаление фантомом
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459056
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну это как бы мысли в слух, куча чиста..
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459066
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttГде-то в степиhVostt,
конструктор, который можно увидеть из наследника, но нельзя видеть снаружи..не

protected ctor?

активатором тоже нельзя создать?
ну активатор это крайние меры :) Можно создать объект вообще без конструктора, есть магический класс (забыл название). Так что это все защита от честных людей))
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459067
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

а вот о чем речь. не думаю, что такая проблема имеет место быть ))
т.е. если там какой-то мусор в памяти остаётся после неудачной операции, беспокоиться ненужно. другое дело продолжать хранить ссылки на убитые объекты.
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459082
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
ну как бы мусор это деликатная тема, вот тут один хлопец делал мега вычисления в конструкторе заполнял поля разными листами
и всего прочее, вот предположим у него возникло исключение на последнем этапе, что это значит, - ссылка на объект
не выкинется, обьект перейдет на удаление и до коллектора будет лежать в куче со всеми гирляндами в виде
указателей на безразмерные массивы и тд, мало того все это разбухание шло медленно - через базу, то есть объект
создавался медленно, память жралась что там делал коллектор я не знаю что бы освободить для такой своры память, и все в конце нахер, ну предположим он словил удачно исключение в самом начале конструктора что имеем, не доделанный объект
которым пользоваться нельзя...., пытались обьяснить что плохо, а он только на чтение зациклился..
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459086
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttкак abstract (by design), но и создавать экземпляры нужно позволить только его наследникам.
что за design такой?
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459093
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivanесть магический класс (забыл название)
Код: c#
1.
FormatterServices.GetUninitializedObject
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459146
JohnSparrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нельзя, к примеру, в конструкторе выполнять проверку вида
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    public class Parent
    {
        public Parent()
        {
            if(this.GetType() == typeof(Parent))
                throw new Exception("Parent class instances creation isn't permitted");
        }
    }

    public class Child : Parent
    {
    }


?
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459187
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
описание самой изачальной задачи бы увидеть
...
Рейтинг: 0 / 0
Запретить создание экземпляров базового не абстрактного класса
    #38459287
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилчто за design такой?

EF Code First. базовый класс и его наследники хранятся в отдельных таблицах. One-To-One Relation. Если сделать базовый класс абстрактным, EF генерирует очень неэффективный SQL-код (абсолютно при любом запросе джойнит все таблицы наследников, и это логично).
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запретить создание экземпляров базового не абстрактного класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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