Форум: "Прочее";
Текущий архив: 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}.
> ..
и называются конструкторы и деструкторы.
В других языках как то также.
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.005 c