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

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



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

Форум: "Прочее";
Текущий архив: 2015.01.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.003 c
15-1402175199
Андрюша
2014-06-08 01:06
2015.01.18
Как избежать Deadlock в Firebird?


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


2-1387504983
Drowsy
2013-12-20 06:03
2015.01.18
Будет ли время вычислений меньше.


2-1387549252
Вова
2013-12-20 18:20
2015.01.18
ListView DrawItem


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
Английский Французский Немецкий Итальянский Португальский Русский Испанский