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

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

protected ctor?

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

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

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

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

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

protected ctor?

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

а вот о чем речь. не думаю, что такая проблема имеет место быть ))
т.е. если там какой-то мусор в памяти остаётся после неудачной операции, беспокоиться ненужно. другое дело продолжать хранить ссылки на убитые объекты.
...
Рейтинг: 0 / 0
10.11.2013, 00:24
    #38459082
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить создание экземпляров базового не абстрактного класса
hVostt,
ну как бы мусор это деликатная тема, вот тут один хлопец делал мега вычисления в конструкторе заполнял поля разными листами
и всего прочее, вот предположим у него возникло исключение на последнем этапе, что это значит, - ссылка на объект
не выкинется, обьект перейдет на удаление и до коллектора будет лежать в куче со всеми гирляндами в виде
указателей на безразмерные массивы и тд, мало того все это разбухание шло медленно - через базу, то есть объект
создавался медленно, память жралась что там делал коллектор я не знаю что бы освободить для такой своры память, и все в конце нахер, ну предположим он словил удачно исключение в самом начале конструктора что имеем, не доделанный объект
которым пользоваться нельзя...., пытались обьяснить что плохо, а он только на чтение зациклился..
...
Рейтинг: 0 / 0
10.11.2013, 00:26
    #38459086
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить создание экземпляров базового не абстрактного класса
hVosttкак abstract (by design), но и создавать экземпляры нужно позволить только его наследникам.
что за design такой?
...
Рейтинг: 0 / 0
10.11.2013, 00:30
    #38459093
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить создание экземпляров базового не абстрактного класса
netivanесть магический класс (забыл название)
Код: c#
1.
FormatterServices.GetUninitializedObject
...
Рейтинг: 0 / 0
10.11.2013, 02:54
    #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
10.11.2013, 11:03
    #38459187
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить создание экземпляров базового не абстрактного класса
описание самой изачальной задачи бы увидеть
...
Рейтинг: 0 / 0
10.11.2013, 14:47
    #38459287
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запретить создание экземпляров базового не абстрактного класса
Изопропилчто за design такой?

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


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