c# условие создания экземпляра класса в конструкторе

программирование C# .net

Доброго времени суток! Есть класс А1. Конструктор ожидает в качестве параметра полный путь к файлу F1. Проверяет его на существование. В случае отсутствия файла - истанс не создается (по моему замыслу), а на практике все не так. :(
class A1 {
string s;
public A1(string fpf)
{
if(!File.Exist(fpf))
return; //возвращает NULL?
s="Hello,ALL!";
....
}
public string fn1()
{
return s;
}
}
Вызов происходит из другого класса:

class A2
{
...
A1 tA=new A1(@"c:\f1");
if (tA!=null)
tA.fn1(); //Почему в случае некорректного пути, все равно выполняется?
else
MessageBox.Show("not instance")
}
Ответы:
Так нельзя сделать. В конструкторе нельзя отменить создание объекта. Лучше сделай какой-нибудь фабричный метод по созданию объектов класса A1.
class A1Factory{
public A1 GetA1
{
if (){
...
return new A1();
}
else return null;
}
}
Конструктор не возвращает объект (с точки зрения MSIL, конструктор возвращает void, то есть ничто), конструктор его инициализирует. Конструктор получает ссылку на объект для инициализации в неявном параметре this. Объект создаётся и возвращается оператором new, который в принципе не может вернуть null. return в конструкторе не отменяет создание объекта, а завершает конструктор обычным образом, также как если бы управление дошло до конца тела конструктора. Если корректная инициализациая объекта не возможна, то конструктор должен выбросить исключение.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.