Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C# Вызов одним конструктором другого.

6.6K
20 декабря 2007 года
Ordos
105 / / 02.11.2007
Можно ли в С шарп из дного конструктора вызывать другой?
Например:
class A
{
protected x;
protected A(int a, double b)
{
x=F(a, b);
}

public A(int a)
{
//вызов конструктора A(a, 0.0);
}

public A(double b)
{
//вызов конструктора A(0, b);
}
}


И еще вопрос. Можно ли сделать, чтоб в результате невзможности создать объект, например в операции:
A obj = new A(0, 3.0);
obj устанавливалась в null?

Спасибо.
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: Ordos
Можно ли в С шарп из дного конструктора вызывать другой?
Например:
class A
{
protected x;
protected A(int a, double b)
{
x=F(a, b);
}

public A(int a)
{
//вызов конструктора A(a, 0.0);
}

public A(double b)
{
//вызов конструктора A(0, b);
}
}


И еще вопрос. Можно ли сделать, чтоб в результате невзможности создать объект, например в операции:
A obj = new A(0, 3.0);
obj устанавливалась в null?

Спасибо.



Все очень просто

Код:
protected A(int a, double b)
{
x=F(a, b);
}

public A(int a):this(a,0.0)
{

}

public A(double b):this(0,b)
{

}


А для запрета создания объекта используй private или static конструктор. А вообще книгу в руки и учить.
6.6K
20 декабря 2007 года
Ordos
105 / / 02.11.2007
неа, закрытый конструктор должен вызываться в конце и использовать параметры, вычисленные в начале.
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Ну и в чем проблемы?
353
21 декабря 2007 года
Nixus
840 / / 04.01.2007
 
Код:
public A(int a):this(calc1(a),0.0)
{

}

public A(double b):this(0,calc2(b))
{

}

где calc1, calc2 - функции.
353
21 декабря 2007 года
Nixus
840 / / 04.01.2007
Цитата: Ordos
И еще вопрос. Можно ли сделать, чтоб в результате невзможности создать объект, например в операции:
A obj = new A(0, 3.0);
obj устанавливалась в null?



Для этого делают "фабрики":

 
Код:
static A* Create(...)
{
    if(!/* Проверяем возможность создания */)
          return 0;
    return new A(...);
}
5
21 декабря 2007 года
hardcase
4.5K / / 09.08.2005
Цитата: Nixus

 
Код:
static A* Create(...)
{
    if(!/* Проверяем возможность создания */)
          return 0;
    return new A(...);
}


Вообщето вопрос по C# был. Там такой код не скомпилируется.

С исправлениями:

 
Код:
public class MyClassFactory {
    public static MyClass Create(.....) {
        if(!/* Проверяем возможность создания */) {
            return null;
            // но можно вызвать специальное исключение
            // throw new MyClassCannotBeCreated();
        }
        return new MyClass(.....);
    }
}
353
21 декабря 2007 года
Nixus
840 / / 04.01.2007
Цитата: hardcase
Вообщето вопрос по C# был. Там такой код не скомпилируется.


Я не слепой. Такой код и в C++ не скомпилируется.

276
21 декабря 2007 года
Rebbit
1.1K / / 01.08.2005
С фабриками абсолютно согласен, но возможно иногда будет удобнее генерить ексепшен, хотя (как мне уже не раз тут говорили) ето более ресурсоемко и не всегда красиво.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог