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)
{
}
C# Вызов одним конструктором другого.
Например:
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?
Спасибо.
Цитата: 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?
Спасибо.
Например:
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?
Спасибо.
Все очень просто
Код:
А для запрета создания объекта используй private или static конструктор. А вообще книгу в руки и учить.
неа, закрытый конструктор должен вызываться в конце и использовать параметры, вычисленные в начале.
Ну и в чем проблемы?
Код:
public A(int a):this(calc1(a),0.0)
{
}
public A(double b):this(0,calc2(b))
{
}
{
}
public A(double b):this(0,calc2(b))
{
}
где calc1, calc2 - функции.
Цитата: Ordos
И еще вопрос. Можно ли сделать, чтоб в результате невзможности создать объект, например в операции:
A obj = new A(0, 3.0);
obj устанавливалась в null?
A obj = new A(0, 3.0);
obj устанавливалась в null?
Для этого делают "фабрики":
Код:
static A* Create(...)
{
if(!/* Проверяем возможность создания */)
return 0;
return new A(...);
}
{
if(!/* Проверяем возможность создания */)
return 0;
return new A(...);
}
Цитата: Nixus
Код:
static A* Create(...)
{
if(!/* Проверяем возможность создания */)
return 0;
return new A(...);
}
{
if(!/* Проверяем возможность создания */)
return 0;
return new A(...);
}
Вообщето вопрос по C# был. Там такой код не скомпилируется.
С исправлениями:
Код:
public class MyClassFactory {
public static MyClass Create(.....) {
if(!/* Проверяем возможность создания */) {
return null;
// но можно вызвать специальное исключение
// throw new MyClassCannotBeCreated();
}
return new MyClass(.....);
}
}
public static MyClass Create(.....) {
if(!/* Проверяем возможность создания */) {
return null;
// но можно вызвать специальное исключение
// throw new MyClassCannotBeCreated();
}
return new MyClass(.....);
}
}
Цитата: hardcase
Вообщето вопрос по C# был. Там такой код не скомпилируется.
Я не слепой. Такой код и в C++ не скомпилируется.
С фабриками абсолютно согласен, но возможно иногда будет удобнее генерить ексепшен, хотя (как мне уже не раз тут говорили) ето более ресурсоемко и не всегда красиво.