Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.68 MB
Время: 0.039 c
2-1387265285
aka
2013-12-17 11:28
2015.01.18
Что быстрее будет работать?


15-1402753733
Override Func
2014-06-14 17:48
2015.01.18
Пересечение прямоугольника и окружности


11-1257251317
Игорь Шевченко
2009-11-03 15:28
2015.01.18
Прошу прощения, по ошибке закрыл ветку "Использование MakeMethod"


15-1402311626
KilkennyCat
2014-06-09 15:00
2015.01.18
Delphi + Asterisk


9-1180944483
Jkot
2007-06-04 12:08
2015.01.18
Отклонение вектора





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский