Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.01.18;
Скачать: CL | DM;

Вниз

Delphi and C#   Найти похожие ветки 

 
Minsk City   (2014-06-05 13:41) [0]

На нашем рынке труда C# гораздо востребованнее Delphi, поэтому решил изучать новую технологию.

Сильно ли отличается C# от Object Pascal и сколько времени потребует перейти на него? Отличается ли принципиально MS Visual Studio от Delphi/RAD Studio?


 
antonn ©   (2014-06-05 13:49) [1]

на шарпе вольготней (очень просто сбыдлокодить работающий продукт), если любил over-ООП на дельфи - в шарпе будешь чувствовать себя хорошо. А после шарпа не далеко и до явы.

я с дельфи7 на шарп пересел примерно за месяц-два (так как надо было уже через месяц приступать к задаче, то прочитал даже пол книжки Вильямся "программирование на дотнет 2005"), но у меня была неслабая мотивация и довольно интересная задача (выданная для теста и позднее ушедшая в продакшн), и при этом почти полная неприязнь к ООП (максимум - инкапсуляция). А если учить "для себя" чтобы потом предложить себя как спеца - фигня выйдет, скорее всего.


 
й   (2014-06-05 13:53) [2]

> Сильно ли отличается C# от Object Pascal
нет, основные отличия - тип впереди переменной, "{" и "}" вместо "begin" и "end" и кавычки двойные, ну и так еще, по мелочам

> сколько времени потребует перейти на него?
10-30 минут (на скачку и установку VS)

> Отличается ли принципиально MS Visual Studio от Delphi/RAD Studio?
да, но общего больше, чем отличий


 
DVM ©   (2014-06-05 15:42) [3]


> Сильно ли отличается C# от Object Pascal

Сильно, но есть и большое множество очень похожих черт.


> и сколько времени потребует перейти на него?

Кроме языка понадобится ознакомится с содержимым огромного фреймворка, в котором стопицот тыщ классов. Кроме этого придется ознакомится со множеством технологий WPF, WCF и т.д. и т.п для реальной эффективной работы. Понадобится время на изучение ассортимента имеющихся сторонних библиотек, компонентов разного рода инструментов типа решарпера и прочего.
Да много еще чего. Весь этот опыт можно получить реально работая с этим языком. Одной книжкой не обойтись.


 
Михалыч   (2014-06-05 18:22) [4]

Обычно клиенту пофигу на чем написана программа, главное чтобы делала то что надо... ;)


 
Юрий Зотов ©   (2014-06-05 18:30) [5]

> DVM ©   (05.06.14 15:42) [3]

А с джавы? Языки схожи, библиотеки, вроде как, тоже. По идее, не такой уж сложный переход должен быть. Или я чего-то не учитываю?


 
Павиа   (2014-06-05 19:37) [6]


> А с джавы? Языки схожи, библиотеки, вроде как, тоже. По
> идее, не такой уж сложный переход должен быть. Или я чего-
> то не учитываю?

Фреймворк у C# свой. Точно также как свой у VC++, GCC, Builder C++ , так и у JAVA. У JAVA там тоже куча своих технологий.


 
DVM ©   (2014-06-05 22:06) [7]


> Юрий Зотов ©   (05.06.14 18:30) [5]


> А с джавы? Языки схожи, библиотеки, вроде как, тоже.

Наверное, чуть легче. Поверхностно все си-подобные языки похожи в плане синтаксиса. Главное на эту похожесть не слишком полагаться, начинаешь копать вглубь все по разному выходит. И фреймворк все равно изучать придется.


 
Пит   (2014-06-07 18:28) [8]

все концепции у ЯВУ схожи. Дельфи концептуально очень неплохой язык. Самой большой новостью для меня стало то, что в C# (как и в большинстве ЯП) конструкторы не наследуются по умолчанию, это считай фишка дельфи.

А так да, синтаксис чуть другой, но это фигня. Основное время - изучение стандартных методик, библиотек, общепринятых практик и т.д.

Уже через месяц после первого знакомства я писал программу с использованием рефлексии, делегатов и прочее, куча терминов - а принципы уже знакомые.

Что радуем - стабильность среды, я почти отвык нажимать CTRL+S, хотя мое знакомство то буквально 2-3 месяца.


 
Ega23 ©   (2014-06-07 18:40) [9]


> Самой большой новостью для меня стало то, что в C# (как
> и в большинстве ЯП) конструкторы не наследуются по умолчанию,
>  это считай фишка дельфи.


Я что-то пропустил?


 
sms   (2014-06-07 22:12) [10]

а как понять то что конструкторы наследуются ?


 
Palladin ©   (2014-06-07 22:31) [11]

это понять так, что фабрики объектов нужных классов писать в много раз круче
гуглить по словам "виртуальные конструкторы delphi" + class of


 
jack128_   (2014-06-07 22:57) [12]


> конструкторы не наследуются по умолчанию, это считай фишка
> дельфи

Точно. TFileStream.Create(10); то что дельфи не может отловить эту ошибку в компил тайм - это её фишка


 
Пит   (2014-06-08 10:29) [13]


> Я что-то пропустил?

откуда я знаю.

Назови ЯП в котором конструкторы наследуются, кроме Дельфи?


 
sms   (2014-06-08 11:24) [14]

вот код (c#):
       class A
       {
           public int dummy;

          public A() { dummy = 100; }
       }

       class B : A
       {
           public string show()
           {
               return dummy.ToString());
           }
       }

Console.WriteLine(new B { }.show());


тут "носледовался", или не о том вопрос ?


 
jack128_   (2014-06-08 12:12) [15]


> ут "носледовался", или не о том вопрос ?

Если у предка есть конструктор без параметров, и у потомка нету пользовательских конструкторов, то компилятор генерирует конструктор без параметров для потомка. Но это не тоже самое, что наследование.


 
Пит   (2014-06-08 13:51) [16]

sms, чтобы проиллюстрировать слова Жэка, вот класс:

class A
      {
          public int dummy;

         public A(int ADummy) { dummy = ADummy; }
      }

...
class B : A
...


Ты не сможешь сделать: ... = new B(10);


 
Пит   (2014-06-08 14:53) [17]

Удалено модератором
Примечание: Рекомендую не нарушать правила форума


 
Ega23 ©   (2014-06-08 16:41) [18]


> Назови ЯП в котором конструкторы наследуются, кроме Дельфи?


Я честно пытался тебя понять. Но не понял.
Что именно ты имеешь ввиду?


 
Пит   (2014-06-08 17:04) [19]


> Я честно пытался тебя понять. Но не понял.

ну Олег, ты чо. Смотри, допустим ты объявил конструктор:

TMyClassA = ...
 constructor MyConstructor(blabla: TTopolya);
...
end;

...

TMyClassB = class(TMyClassA)
...

Очевидно, что у TMyClassB будет конструктор с именем MyConstructor, верно? Унаследован он от класса предка TMyClassA.
Ты к этому привык, что конструктор наследуется как и любой другой метод. Это идеология Delphi.

В большинстве других известных языков наследования конструкторов нету! То есть, объявляя TMyClassB - у него не будет конструктора MyConstructor. Если хочешь отнаследовать все конструкторы - можешь их переобъявить с перевызовом (inherited в понятиях дельфи) метода класса предка.


 
antonn ©   (2014-06-08 20:15) [20]


> inherited в понятиях дельфи

а через base это не то?


 
Пит   (2014-06-08 21:39) [21]

Удалено модератором


 
DVM ©   (2014-06-08 22:01) [22]


> Пит   (08.06.14 17:04) [19]

Определенная логика в этом есть. Конструктор базового класса вообще говоря не умеет конструировать наследников. Это дает гарантию некоторую, что все поля наследника будут проинициализированы верно. Базовый класс не знает о этих полях ничего.


 
DVM ©   (2014-06-08 22:05) [23]

Кроме этого, даже иногда вредно иметь конструктор унаследованный от предка. Допустим классу наследника необходимо передать какой то параметр в конструктор, что и сделано в его конструкторе, а класс предка такой параметр не принимает в конструкторе и само конструирование класса наследника без этого параметра не имеет смысла.


 
Ega23 ©   (2014-06-08 22:53) [24]


> Допустим классу наследника необходимо передать какой то
> параметр в конструктор, что и сделано в его конструкторе,
>  а класс предка такой параметр не принимает в конструкторе
> и само конструирование класса наследника без этого параметра
> не имеет смысла.


Если статичный - ну заводишь какой надо параметр, только потом не забыть inherited впаять.
Если virtual - ну тогда reintroduce.

И я продолжаю решительно недоумевать, о чём вообще "спор".


 
Пит   (2014-06-08 23:10) [25]


> Определенная логика в этом есть.

ээ, собственно эта логика применена во всех популярных ЯП, окромя дельфи.
Вот в них так, а вот в дельфи по другому. Только об это и шла речь, читайте сначала.


 
jack128_   (2014-06-08 23:54) [26]


> Если статичный - ну заводишь какой надо параметр, только
> потом не забыть inherited впаять.

Я ж привел пример пример с FileStream"ом, где такой прием не работает.


> Если virtual - ну тогда reintroduce.

Угу, вот и вылазят потом ошибки в ран-тайм в случайных местах.
TA = class
public
 constructor Create; virtual;
end;
TAClass = class of TA;
TB = class(TA)
public
 constructor Create(I: Integer); reintroduce;
end;

var
 Cl: TAClass;
begin
 Cl := TB;

 .....
 Cl.Create; // Оп-с. А конструтор TB,  то и не вызвался. С нетерпением ждем тикет с AV в трекере.
end;


 
Пит   (2014-06-09 00:30) [27]

Удалено модератором


 
Пит   (2014-06-09 01:34) [28]

Удалено модератором


 
Ega23 ©   (2014-06-09 07:27) [29]

Удалено модератором


 
jack128_   (2014-06-09 10:27) [30]

Удалено модератором


 
Ega23 ©   (2014-06-09 10:47) [31]

Удалено модератором


 
jack128_   (2014-06-09 11:27) [32]

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


 
Пит   (2014-06-09 16:10) [33]


> В этом твоем NOCOUNT

это отключение / включение посылки уведомления на клиента информации о том, сколько записей выбрано. Если в хранимке несколько SELECT"ов - это может сильно замедлить работы по связи с клиентом туда сюда.
А так ты все правильно сказал.


 
Пит   (2014-06-09 16:11) [34]

Удалено модератором


 
Ega23 ©   (2014-06-09 16:34) [35]


> Если в хранимке несколько SELECT"ов - это может сильно замедлить
> работы по связи с клиентом туда сюда.


Это не столько замедляет работу, сколько не гарантирует того, что нужный тебе рекордсет придёт первым.


> а в остальных популярных языках наследования конструкторов нету.


Я тут посидел, в старых исходниках порылся. В общем, я там конструкторы без параметров использовал.


 
Пит   (2014-06-09 16:54) [36]


> Я тут посидел, в старых исходниках порылся. В общем, я там
> конструкторы без параметров использовал.

интересная фраза. Ты про ЯП отличный от дельфи?

Тогда это явная ошибка, интересно почему ты не заметил. В конструкторе без параметров можно ошибиться и подумать, что тот же C# наследует конструкторы, но в реальности он не наследует, при отсутствии конструкторов он создает "пустой" конструктор.

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


 
ТНЕ картман   (2014-06-09 18:13) [37]

да какая разница, наследуется-не наследуется? Вечно фигню перетираете))


 
han_malign   (2014-06-10 12:20) [38]


>  наследуется-не наследуется?

- в Delphi нет конструкторов и деструкторов, а есть специальные  мета-методы которые магически вызывают NewInstance{InitInstance} и FreeInstance{CleanupInstance}...

То есть - синтаксический сахар для TurboPascal-евсково
  new(TmyObject, TmyObject.init)/dispose(pObject,TmyObject.done)...


 
han_malign   (2014-06-10 12:32) [39]

а в C# и иже с ним - все еще запущенней:
http://www.transl-gunsmoker.ru/2012/09/blog-post.html


 
Пит   (2014-06-10 14:26) [40]


> а есть специальные  мета-методы которые магически вызывают
> NewInstance{InitInstance} и FreeInstance{CleanupInstance}.
> ..

и называются конструкторы и деструкторы.
В других языках как то также.


 
sms   (2014-06-10 18:03) [41]


> который ничего не делает, то есть по крайней мере не вызывает
> конструктор предка.
а в моем примере делает :)


 
Пит   (2014-06-10 21:03) [42]


> а в моем примере делает :)

в посте [14] ?

Не должна переменная инициализироваться числом 100 при вызове new B


 
Inovet ©   (2014-06-10 21:57) [43]

> [42] Пит   (10.06.14 21:03)

Это что же получается, если я не написал дефолтный конструктор и явно не вызвал конструктор предка, то кирдык инициализации объекта? Ужас.


 
Romkin ©   (2014-06-11 10:51) [44]


> В большинстве других известных языков наследования конструкторов
> нету!

Надо говорить "в большинстве известных мне..."
Objective-C и Python следят за тобой с интересом :)


 
Пит   (2014-06-11 11:04) [45]


> Надо говорить

а как ты интерпретировал слово "в большинстве"? )


 
Romkin ©   (2014-06-11 11:19) [46]


> а как ты интерпретировал слово "в большинстве"? )

Как неточность. "в большинстве известных". Сейчас все больше языков с метаклассами среди популярных, на мой взгляд.


 
Inovet ©   (2014-06-11 11:37) [47]

> [43] Inovet ©   (10.06.14 21:57)
> > [42] Пит   (10.06.14 21:03)


Уффф, отлегло

class CA
{
 int v;
public:
 CA() {v = 1234567;}
 CA(int Val) {v = Val;}

 GetVal() {return v;}
};

class CB : public CA
{
 public:
 CB() {;}
 CB(int Val) : CA(Val) {;}
};

int _tmain(int argc, _TCHAR* argv[])
{
 CB b1;
 CB b2(2345678);
 printf("b1 = %i, b2 = %i", b1.GetVal(), b2.GetVal());
 getchar();
 return 0;
}

Вывод:
b1 = 1234567, b2 = 2345678


Или ты об чём?


 
Пит   (2014-06-11 11:48) [48]


> b1 = 1234567

и как ты это объяснишь? Ты же явно объявил  у CB конструктор, который ничего не делает, в том числе не вызывает конструктор предка (Base) или в понятиях дельфи не делает inherited, почему же тогда произошла инициализация переменной?

Может Jack128 придет и объяснит...


 
han_malign   (2014-06-11 12:05) [49]


> в том числе не вызывает конструктор предка

- конструктор - на то и конструктор, что вызывается всегда - для каждого включаемого класса, в том числе - включаемого по наследованию...
Внесите "пустой"  конструктор базового класса в private секцию - и будет вам полное просветление...


 
Inovet ©   (2014-06-11 12:20) [50]

> [48] Пит   (11.06.14 11:48)
> и как ты это объяснишь?

Ну так вызывается же, надо в стандарте смотреть точные формулировки

class CA
{
 int v;
public:
 CA() {v = 1234567; printf("CA()\n");}
 CA(int Val) {v = Val; printf("CA(int Val)\n");}

 GetVal() {return v;}
};

class CB : public CA
{
public:
 CB() {printf("CB()\n");}
 CB(int Val) : CA(Val) {printf("CB(int Val)\n");}
};

int _tmain(int argc, _TCHAR* argv[])
{
 CB b1;
 CB b2(2345678);
 printf("b1 = %i, b2 = %i", b1.GetVal(), b2.GetVal());
 getchar();
 return 0;
}

Вывод:

CA()
CB()
CA(int Val)
CB(int Val)
b1 = 1234567, b2 = 2345678


 
Пит   (2014-06-11 12:22) [51]


> конструктор - на то и конструктор, что вызывается всегда
> - для каждого включаемого класса

ниче не понял. А я слышал мнение, что в дельфи конструктор предка вызовется, если только inherited написать


 
Romkin ©   (2014-06-11 12:35) [52]

Delphi вызывает NewInstance, а дальше код конструктора. Есть вызов предка - вызовется. Точная ситуация как и с обычным методом. Но почему-то явный вызов inherited в виртуальном методе не беспокоит, а вот в конструкторе вызывает недоумение.


 
Пит   (2014-06-11 12:54) [53]


> Вывод:
>
> CA()
> CB()

удивительно. Еще и конструктор CA первым вызвался. Я не понимаю, почему. Может кто пояснит.


 
Inovet ©   (2014-06-11 14:08) [54]

> [53] Пит   (11.06.14 12:54)
> Я не понимаю, почему

Ну так базовый класс должен быть инициализирован, прежде чем наследник будет что-то там с его и со своими данными делать.


 
Inovet ©   (2014-06-11 14:12) [55]

А, ну ты может про это
 CB(int Val) : CA(Val) {printf("CB(int Val)\n");}
так если сделать так
 CB(int Val) {printf("CB(int Val)\n");}
то тоже вызовется дефолтный
 CA()
.
Мало ли чего и зачем мы там передали в
CB(int Val)


 
Пит   (2014-06-11 14:24) [56]


> так если сделать так
>  CB(int Val) {printf("CB(int Val)\n");}
> то тоже вызовется дефолтный
>  CA()

а вот почему?!?!

Такого уже даже и в дельфи нету, чтобы вызвать метод у предка всегда нужно фигачить Inherited.


 
Пит   (2014-06-11 14:25) [57]

ничего не понимаю


 
jack128_   (2014-06-12 22:09) [58]


> а вот почему?!?!

а почему когда ты вызываешь TMyObject.Create()  вызывается не только тело конструктора Create, но и InitInstance  ?  Потому что так решили разработчики языка.


 
картман ©   (2014-06-12 22:57) [59]


> han_malign   (10.06.14 12:20) [38]
>
>
> >  наследуется-не наследуется?
>
> - в Delphi нет конструкторов и деструкторов, а есть специальные
>  мета-методы

да какая разница-то? Есть язык, пишешь в соответствии с его спецификой - все. Дальше все одинаковое, хоть дельфи, хоть си шарп, хоть что угодно.  Бухгалтерия все та же.


 
Пит   (2014-06-13 19:26) [60]


> Потому что так решили разработчики языка.
>

подожди, ты же сам мне объяснял...
Почему в примере [50] вызывается конструктор CA вообще?!

Вроде я так понял, что должен вызваться конструктор именно того класса, который и создается. Если нет ни одного объявленного конструктора - то создается конструктор по умолчанию без параметров, который ничего не делает по сути (кроме внутренней магии).

А из примера видно, что несмотря на объявленный конструктор - СНАЧАЛА вызывается конструктор предка... Что это вообще такое?! Какая тогда логика вызова всё таки в шарпе?


 
ухты   (2014-06-13 19:40) [61]

[50] это не шарп, но в шарпе тоже самое


 
Inovet ©   (2014-06-13 21:22) [62]

> [60] Пит   (13.06.14 19:26)
> Какая тогда логика вызова всё таки в шарпе?

Ну, как уже замечено, это не шарп, но смысл то же. Помню, у меня непонимание возникло в одном вопросе по физике после лекции. Вот вроде понятно всё, а не понятно зачем оно надо. Ну и чё - между парами в курилке возле лифта спросил об этом курильщиков, затягиваясь сам отравой, - Чё это вообще за нафиг? Так один мне объясинл на пальцах за 1 минуту, но я нифига не понял, а другой объяснил ещё за одну минуту, и я уже понял.

И мы пошли на следующее занятие вооружонные знанием.

Да. Наверное этот пост тоже политически окрашен и будет удалён?


 
jack128_   (2014-06-14 01:00) [63]


> Что это вообще такое?! Какая тогда логика вызова всё таки
> в шарпе?

Перед вызовом конструктора класса вызывается конструктор базового класса.  Всегда. Если не указано явно какой именно конструктор базового класса нужно вызвать, то вызывается конструктор по умолчанию(=конструктор без параметров). Если конструктор по умолчанию недоступен(его нету, или он объявлен в предке как private), то будет ошибка компиляции.


 
Пит   (2014-06-14 10:13) [64]

Блин а я был уверен, что как и в дельфе конструкторы предка надо вызывать только вручную...


 
Пит   (2014-06-14 16:30) [65]


> Перед вызовом конструктора класса вызывается конструктор
> базового класса

подожди, Жень... А если я хочу реализовать дельфовое поведение?

Допустим, при создании моего класса TB, который я отнаследовал от TA - я хочу, чтобы сначала получил управление я, что-то нашаманить, может даже получить данные по сети или типа того, а потом уже вызвать конструктор базового класса TA, передав динамически полученные параметры, как это сделать?

На примере шарпа, допустим


 
jack128_   (2014-06-14 16:46) [66]

На примере плюсов:
class A {
public:
   A(int data){}
};

class B: A {
public:
   B(): A(GetDataFromNetwork()){}
   int x = 10;
private:
   static int GetDataFromNetwork() {
       return 1;
   }
};


 
Пит   (2014-06-14 18:35) [67]

хитрооо ))


 
DVM ©   (2014-06-14 19:22) [68]


> Пит   (14.06.14 16:30) [65]


> А если я хочу реализовать дельфовое поведение?


> На примере шарпа, допустим

вот тут обсуждали http://www.rsdn.ru/forum/dotnet/3428511.flat там и jack128 и григорьев :)


 
Внук ©   (2014-06-14 20:16) [69]

>>Пит   (11.06.14 14:24) [56]

type
 TA = class
 private
   FFoo: string;
 ...
   public
      constructor Create;
 end;

...

constructor TA.Create;
begin
 FFoo := "Bar";
end;

procedure SomeMethod;
var
 A: TA;
begin
 A := TA.Create;  // Конструктор предка будет вызван без всяких inherited
 ...
end;


 
jack128_   (2014-06-14 20:21) [70]

2Внук ?? Какого предка ??? Tobject что ли? Нет, не будет вызван.


 
brother ©   (2014-06-14 20:32) [71]

Я не понимаю о чем сыр-бор:
type
TA = class
private
  FFoo: string;
public
  constructor Create;
end;

TB = class(TA)
  constructor Create;
end;
...
constructor TA.Create;
begin
FFoo := "Bar";
end;

constructor TB.Create;
begin
inherited; // вызываем конструктор предка класса
FFoo := "Bar2";
end;
...
var
 B: TB;
begin
 b:= TB.Create;
end;


если inherited не делать, то конструктор TA вызван не будет...


 
brother ©   (2014-06-14 20:46) [72]

ps. конструктор Tobject вызван не будет...


 
brother ©   (2014-06-14 20:49) [73]

> Допустим, при создании моего класса TB, который я отнаследовал
> от TA - я хочу, чтобы сначала получил управление я, что-
> то нашаманить, может даже получить данные по сети или типа
> того, а потом уже вызвать конструктор базового класса TA,
> передав динамически полученные параметры, как это сделать?

constructor TB.Create;
begin
шаманим первые)
inherited;  

end;


 
Внук ©   (2014-06-14 20:52) [74]

>>jack128_   (14.06.14 20:21) [70]
Да. Не то написал. Имел в виду, что объект будет корректно создан без вызова конструктора предка. Вобщем, ерунду написал.


 
ухты   (2014-06-14 23:56) [75]

static и "чтобы сначала получил управление я", как бы не одно и тоже
в паблик static вывести и "шамать" перешамань


 
Пит   (2014-06-15 04:04) [76]

Удалено модератором


 
ухты   (2014-06-15 08:32) [77]

Удалено модератором


 
Предавший Паскаль   (2014-06-15 09:41) [78]

Где-то слышал такое выражение:
"Delphi - он добрый. :)".

Все что не он, агрессоры.


 
Пит   (2014-06-15 12:16) [79]


> На примере плюсов:

Жень, а если я хочу создать класс-наследник с конструктором без параметров и чтобы СНАЧАЛА мой конструктор получил управление, а потом уже вызвать конструктор предка?


 
jack128_   (2014-06-15 19:22) [80]

Зачем?


 
Пит   (2014-06-16 01:04) [81]

то есть, вопрос нерешаем?


 
jack128_   (2014-06-16 11:10) [82]

Ну понимаешь, это вопрос сродни тому, как получить доступ к strict private полю в чужом классе и тд. Потенциально можно. Но не нужно.


 
Пит   (2014-06-16 21:52) [83]

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


 
jack128_   (2014-06-16 22:03) [84]

А конструктор без параметров ? То есть проверять нужно некое глобальное состояние ?
Плюс прервать создание объекта ты можешь только подняв исключение, что само по себе уже очень "дорогая" операция ?

На первый взгляд, самый простой вариант, это просто запретить создание объекта через конструтор. Пусть кому надо создает его через стат. метод. А в этом методе уже можно что угодно наворотить.


 
Пит   (2014-06-17 10:20) [85]


> А конструктор без параметров ? То есть проверять нужно некое
> глобальное состояние ?

ну например конструктор базового класса лезет в интернет и что-то считывает. Если соединения нету - то все зависает минут на 5. А я в своем конструкторе могу быстро определить, что интернета нету, ну как вариант.


 
ухты   (2014-06-17 10:23) [86]

это плохое проектирование :)


 
Пит   (2014-06-17 11:52) [87]

Удалено модератором


 
KilkennyCat ©   (2014-06-18 10:23) [88]

Немного не в тему, но про шарп :)
кто-нибудь использовал SharpDeveloper?
http://www.icsharpcode.net/opensource/sd/


 
KilkennyCat ©   (2014-06-19 14:55) [89]

SharpDeveloper. первые сутки работы оставляют меня в восхищении.


 
ухты   (2014-06-19 18:06) [90]

так а в чем разница от экспресс студии?


 
KilkennyCat ©   (2014-06-19 18:31) [91]

сама среда удобнее. После делфи в студии мне было очень тяжело работать. В шарпдевелопере - намного легче.
плюс:
малый "вес".
никакой регистрации для загрузки.
ничего лишнего.
моментальный запуск.
для англопроблемных - русификация.
исходники.



Страницы: 1 2 3 вся ветка

Текущий архив: 2015.01.18;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.009 c
15-1402829721
Юрий Зотов
2014-06-15 14:55
2015.01.18
Диск накрылся - чем лечить?


2-1383842662
MultIfleX
2013-11-07 20:44
2015.01.18
XE5 Android LocationListener


2-1387193293
Павел
2013-12-16 15:28
2015.01.18
Проблема переноса проекта в XE2


15-1402045300
Palladin
2014-06-06 13:01
2015.01.18
Ищу работу


1-1329473490
pasha_golub
2012-02-17 14:11
2015.01.18
Вызов функции из DLL. Мистика