Главная страница
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}.
> ..

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



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

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

Наверх




Память: 0.57 MB
Время: 0.006 c
15-1402811253
Библиарий
2014-06-15 09:47
2015.01.18
Как этот простой подход/паттерн/не знаю называется?


15-1401985999
Alik
2014-06-05 20:33
2015.01.18
TComboBoxEx не показывает первую строчку


15-1402175199
Андрюша
2014-06-08 01:06
2015.01.18
Как избежать Deadlock в Firebird?


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


15-1403123402
Юрий
2014-06-19 00:30
2015.01.18
С днем рождения ! 19 июня 2014 четверг