Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как НЕ создать объект при вызове конструктора? 
:(
    Опции темы
Stas123
Дата 13.7.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Такой вопрос.
возможно ли чтобы объет создовался или не создавался, в зависимости, от того, что передано в его констрктор?
Код

public MyClass(bool b)
        {
            if(b)
            {
                //инициализация полей
            }
            else
            {
                //объект не создается
            }
        }

Может быть можно как-то в конструкоре установить объект в null ?
PM MAIL   Вверх
Дрон
Дата 13.7.2011, 16:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 24
Всего: 93



Нет. Нельзя.
Можно, например, объявить конструктор как private, и для создания объектов использовать статический метод.
Код
private MyClass()
{
}

public static MyClass CreateInstance(bool b)
{
    if(b)
    {
        .... 
    }
    else
    {
        return null;
    }
}

Но это не всегда удобно.


--------------------
Да. Именно так.
PM   Вверх
azesmcar
Дата 13.7.2011, 16:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Я так понимаю это условие - условие ошибки. В случае ошибки кидай исключение, это единственный нормальный способ сообщить об ошибке создания объекта.
PM   Вверх
Stas123
Дата 14.7.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Дрон, спасибо.
PM MAIL   Вверх
N1ko
Дата 14.7.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Как по мне вглядит глупостью. Думаю тебе твоё условие лучше проверять не в конструкторе, а ещё до его запуска. Возможно я конечно не прав, но пока не могу придумать случая, где может возникнуть такая потребность.
Всё будет выглядеть гораздо проще, если как то так попробовать
Код

if(b)
{
MyClass _Class = new MyClass()
}

PM MAIL ICQ   Вверх
Экскалупатор
Дата 14.7.2011, 17:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



N1ko, ну, это может понадобиться, когда у тебя сам класс должен определить может он существовать с какими то данными или нет. но на мой взгляд лучше бросить исключение, чем потом по всему коду проверять создался ли объект или там пустая ссылка... 
PM MAIL ICQ   Вверх
N1ko
Дата 14.7.2011, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

Репутация: нет
Всего: нет



Может быть и так. Видимо я пока в реальной жизни с такими случаями не встречался, что бы входящий параметр конструктора поределял существование того же класса.
PM MAIL ICQ   Вверх
Экскалупатор
Дата 14.7.2011, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 11
Всего: 24



N1ko, тут наверное больше вопрос организации кода. к примеру: предположим что у тебя есть класс, который описывает человека -> военнослужащего, соответственно у этого класса должно быть ограничение по возрасту. возьмем условно от 18 до 45. далее вопрос: а кто должен определять и проверять эти границы? если следовать принципу что класс должен сам отвечать за свое состоянии, то вполне логично поместить эту логику в сам класс. в таком случае мы можем быть уверены что если возраст как то измениться и мы поменяем его в класса(в одном месте всей программы) то никто больше на этот параметр не повлияет... конечно всегда возможны варианты и обходные маневры, опять же повторюсь - вопрос организации и проектирования.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.