Приветствую Вас, Гость

Меню

Форма входа

Войти через соцсеть:

Уроки
Урок 1. Как написать программу на C#
Урок 2. Что такое элементы, свойства и события и как с ними работать
Урок 3. Условный оператор if (ЕСЛИ). Операторы & (И) и | (ИЛИ)
---
Урок 1. Как написать приложение Android на C#

Статьи
Как быстро перейти с C++ на C#

Друзья сайта
  • Создайте сайт на uCoz бесплатно
  • MSDN - Руководство C#
  • MSDN - C# для школьников
  • PInvoke.Net - C# под WinAPI (DllImport'ы)

  • Статистика
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

     Каталог статей 
    Главная » Статьи » 2. C# и другие языки. MS .NET и другие платформы » C# и другие языки [ Добавить статью ]

    Как быстро перейти с С++ на C#
    C# реально имеет много достоинств, поэтому некоторые профи хотят перейти с С++ на C# . Казалось бы, эти языки вообще похожи, а уж если кто-то писал на С++ под .NET, то перейти на C# можно за полчаса...ну, в случае мегасложного проекта - за пару часов. Всего делов-то - прочесть про отличия этих языков и запомнить, а то, что у них одинаково, и читать незачем. Но вот проблема: про отличия С++ вообще, С++ под .NET и C# .- нигде толком, практично и коротко, без воды, не написано.
    Я даже получила ЛО на Ответах от одного программера, которому написала про эти отличия.
    Поэтому, возможно, кому-то пригодится моя статья об отличиях С++ под .NET и C#, такая, чтоб в ней были не теоретические рассуждения, а чтоб прочтя ее, программер С++ под .NET мог начать писать на C#.

    C# так мало отличается от С++ под .NET Framework в Visual Studio, что всякий, кто знает С++ под .NET, может выучить C# за полчаса, и толстые книги для его изучения не нужны. Достаточно найти и запомнить несколько синтаксических отличий и несколько более существенных. Но если кто-либо знает С++, но не знает .NET Framework, то .NET Framework ему и надо учить, а не C#.

    Главное отличие, о котором почему-то мало кто упоминает:
    если вы пишете на С++ под .NET в Visual Studio, то вы можете, кроме .NET, использовать стандартную библиотеку С++. Нравится вам STLевский вектор? – подключите соответствующий заголовочный файл и используйте на здоровье. Нужны какие-то WinAPI-функции? - подключайте windows.h и используйте.
    C# использует только библиотеку .NET и те библиотеки, которые напишете вы сами. Никаких windows.h, STL и т.д. Если ОЧЕНЬ нужна функция из тех библиотек, ее придется импортировать вручную.

    ООП
    C# - полностью объектно ориентированный. То есть в нем нельзя создавать глобальных переменных и функций. Все они должны объявляться как члены какого-либо класса. Даже сама Main. В C# Main пишут с большой буквы (так как имена методов вообще принято писать с заглавной буквы), она всегда static (логично и удобно - не надо создавать объект класса, чтобы ее запустить), возвращает void (тоже логично) и объявляется как метод класса Program или типа того. Может принимать один параметр - массив ссылок на строки.

    Рассмотрите этот код. Найдите все отличия от С++ - и половину C# уже знаете.

    Код
    using System;
    using System.Text;

    namespace MyConsoleProgram
    {
      class Program
      {
      static void Main(string[] args)
      {
      Console.WriteLine("Я уже знаю C#!");
      Console.ReadKey();
      }
      }
    }

    Пояснение. В C# нет ни системной паузы, ни getch() из <conio.h>. Чтобы консольное окно не закрывалось, едва открывшись, используют
    Console.ReadKey();
    или
    Console.ReadLine();

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

    При объявлении классов, в отличие от C++, модификаторы доступа должны указываться для каждого члена в отдельности.
    class Animals
    {
        public const string ClassOfAnimal = "Млекопитающее";
        private string Weight;

        public Animals(string text)
        {
            Console.WriteLine(text);
        }

        public void Print(string text)
        {
            Console.WriteLine(text);
        }

        private void ShowWeight()
        {
            Console.WriteLine(Weight);
        }
    }

    Вместо стрелки и двойного двоеточия - всегда точка.

    В С++ было
    using namespace System::IO;

    MyClass::a = 5;
    This->a = 5;
    MyObjectPointer->a = 5;
    MyObject.a = 5;

    В C#
    using System.IO;

    MyClass.a = 5;
    This.a = 5;
    MyObjectPointer.a = 5;
    MyObject.a = 5;

    Благодаря наличию в .NET автоматического сборщика мусора деструкторы пользовательских классов в C# не нужны - кроме случаев, когда пользовательский класс содержит указатели и небезопасный код (работающие с указателями методы).

    Пространства имён те же, что и в С++ под .NET, но слово namespace употребляется только при объявлении пространства имен данной программы.

    В С++ было
    using namespace System;
    ...
    namespace MyProgram

    В C#
    using System;
    но
    namespace MyProgram

    Переменные и типы

    Все как в С++, но string - самостоятельный тип данных.
    string message = "Allah akbar";
    Console.WriteLine(message);
    - это потому, что в .NET ВСЕ встроенные типы данных - это классы или структуры, поэтому любая переменная автоматом является членом какого-то класса, даже int, bool или char. String - тоже объект встроенного класса String.

    В C# нету typedef, так что вместо
    typedef unsigned long DWORD;
    пишем
    using DWORD = System.UInt64;
    или
    using DWORD = System.Int32;
    - и область видимости ограничена файлом, где этот using находится.
    Некоторым неудобно.

    Формально типы делятся на ссылочные (reference type) и value type или value-based type — где-то переводится как значимый тип, где-то тип значений, где-то структурный тип.
    Типы значений хранят данные непосредственно, ссылочные типы - ссылку на значение. Что такое ссылки, знатоки С++ знают.
    Есть информация, что типы значений хранятся в стеке, ссылочные - в управляемой куче.

    Массивы
    Массив статический делают так

    int[] My_massiv;
    string[] My_string_array = {"The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"};

    Для объявления двумерных массивов, используются пустые индексы через запятую.
    int[,] My_table;

    В С++ было

    type name[n] ;
    int massiv[10];
    int table[5][3];

    Динамические массивы лучше всегда создавать как объекты встроенного класса Array платформы .NET Framework. Однако, обычные указатели, как в С++, в эти массивы помещать нельзя - надо или значения, или дескрипторы.

    Дескрипторы
    Дескриптор (управляемый указатель) - тот самый, что в С++ под .NET изображается с галочкой ClassDotNet ^ name;
    В С++ использовался как-то так
    StreamWriter ^file = File::CreateText(saveFileDialog1->FileName);
    а в C# галочка не нужна: просто ClassDotNet name;
    например
    StreamWriter file = File.CreateText(saveFileDialog1.FileName);

    Дескриптор - это тоже нечто вроде указателя, но:
    1) он может указывать только на объект встроенного класса .NET или пользовательского ссылочного класса, объявленного как ref class MyClass
    2) его возможности к этому и сводятся - больше с ним ничего делать нельзя, нельзя даже переназначить другому объекту в пределах одной области видимости
    3) с его объявления начинают создание объектов встроенных классов .NET, и это удобно: дескриптор можно объявить вне обработчиков событий, прямо внутри класса формы, а конкретные объекты создавать и использовать уже внутри обработчиков событий, и тогда объект, созданный в одном обработчике, будет виден во всех.
    4) все, что объявляется через дескриптор, записывается в особую область памяти - управляемую кучу. Суть управляемости - в основном в работе автоматического сборщика мусора.
    В C++/CLI классы бывают неуправляемые и управляемые, а последние должны быть обозначены ключевым словом ref для ссылочного типа и value для типа значений. Типы значений хранятся в стеке, управляемые ссылочные типы - в управляемой куче, неуправляемые ссылочные типы - в неуправляемой куче. Все, что объявляется без дескриптора, пишется в неуправляемую часть памяти, и для переноса данных из управляемой части в неуправляемую или обратно приходится делать специальные действия, иногда довольно громоздкие.
    В С++ под .NET объект встроенного класса .NET, помимо дескриптора с галочкой, требует для своего создания оператора gcnew, тогда как объекты иных классов создаются обычным new
    form2^ gform2 = gcnew form2;
    В C# этого различия нет - все объекты создаются через new
    form2 gform2 = new form2;

    Функции
    Ну, тут отличий от С++, кроме указанных в разделе ООП, нету.

    Указатели
    В C# можно использовать указатели так же, как и в С++, но это считается нежелательным, поскольку снижает надежность кода и среды выполнения в целом.
    Поэтому есть три правила:
    1. Методы в C#, если они используют указатели, должны иметь атрибут unsafe. Это ключевое слово можно применить не ко всему методу, а лишь к группе операторов.
    Код, помеченный как небезопасный, запускается вне области управления памятью с помощью сборщика мусора (Garbage Collector).

    using System;
    class MyClass
    {
        public unsafe void Method()
        {
            int x = 10;
            int *ptrx = &x;
            Console.WriteLine((int)ptrx);
            Console.WriteLine(*ptrx);
        }
    }

    class MyClient
    {
        public static void Main()
        {
            MyClass mc = new MyClass();
            mc.Method();
        }
    }

    Можно пометить как небезопасную и группу операторов:

    using System;

    class MyClass
    {
        public void Method()
        {
            unsafe
            {
                int y = 20;
                int *ptry = &y;
                Console.WriteLine((int)ptry);
                Console.WriteLine(*ptry);
            }
        }
    }

    class MyClient
    {
        public static void Main()
        {
            MyClass mc = new MyClass();
            mc.Method();
        }
    }
    2. Проект C#, в котором есть небезопасный (unsafe) код, должен иметь соответствующее разрешение в настройках (установить опцию компилятора /unsafe).

    3. Получение указателя от объекта возможно только в том случае, если он определен с атрибутом fixed.
    Дело в том, что любая уборщица может по неведению выбросить что-то нужное владельцу убираемого помещения, так и сборщик мусора в .NET может уничтожить ваши объекты в памяти в соответствии со своим алгоритмом процесса уборки мусора. Чтобы этого избежать, C# предоставляет специальное ключевое слово fixed, указывающее сборщику мусора не перемещать объект. Позиция переменной в памяти в памяти фиксируется, чтобы на нее мог ссылаться указатель. Это называется еще "прикрепление" (pinning).
    Пока процесс сбора мусора не встречает во время выполнения операторов fixed, потери ресурсов на них оказываются весьма незначительными. Но когда сборщик мусора встречает fixed, то фиксированные объекты могут привести к образованию фрагментации кучи (heap). Т. е. в куче могут появиться неиспользуемые участки, занимающие много места. Поэтому объекты должны помечаться как fixed только тогда, когда это абсолютно необходимо, и только на самый малый, насколько это возможно, промежуток времени выполнения кода.

    using System;
    class Test
    {
        public int num;
        public Test (int i) { num = i; }
    }
    class FixedCode
    {
        unsafe static void Main()
        {
            Test о = new TestA9); 
            fixed (int* p = &o.num)
            
                Console.WriteLine("Исходное значение переменной о.num: " + *р); 
                *р = 10; 
                Console.WriteLine("Новое значение переменной о.num: " + *р); 
            
        }
    }

    Кому мало этого материала- см. статью, прекрасно дополняющую нашу
    http://www.cyberforum.ru/cpp-cli/thread83662.html
    Категория: C# и другие языки | Добавил: Iren_Nietzsche (04.02.2014) | Автор: Iren_Nietzsche E
    Просмотров: 11387 | Комментарии: 382 | Теги: C#, C++ | Рейтинг: 3.0/2
    Всего комментариев: 3821 2 3 ... 38 39 »
    382 Seo-Ul-hed   (28.03.2024 00:46) [Материал]
    Мы служба профессиональных SEO-оптимизаторов, занимающихся увеличением трафика и улучшением рейтинга вашего сайта в поисковых системах.
    Мы достигли значительных результатов и хотим поделиться с вами нашим опытом и навыками.
    Какие возможности открываются перед вами:
    • <a href=https://seo-prodvizhenie-ulyanovsk1.ru/>продвижение сайта визитки цена</a>
    • Комплексный анализ вашего сайта и разработка индивидуальной стратегии продвижения.
    • Оптимизация контента и технических аспектов вашего сайта для максимальной эффективности.
    • Постоянный контроль и анализ данных для улучшения вашего онлайн-присутствия.
    Подробнее <a href=https://seo-prodvizhenie-ulyanovsk1.ru/>https://seo-prodvizhenie-ulyanovsk1.ru/</a>
    Уже сейчас наши клиенты получают результаты: повышение посещаемости, улучшение позиций в поисковых запросах и, конечно же, рост бизнеса. Мы готовы предоставить вам бесплатную консультацию, для того чтобы обсудить ваши потребности и разработать стратегию продвижения, соответствующую вашим целям и финансовым возможностям.
    Не упустите шанс улучшить свой бизнес в онлайн-мире. Свяжитесь с нами уже сегодня.

    381 ppu-prof_pa   (08.03.2024 11:39) [Материал]
    Наша группа профессиональных исполнителей предоставлена выдвинуть вам инновационные технологии, которые не только обеспечат надежную протекцию от прохлады, но и дарят вашему зданию модный вид.
    Мы занимаемся с современными строительными материалами, утверждая долгосрочный период использования и выдающиеся эффекты. Теплоизоляция фронтонов – это не только сокращение расходов на отоплении, но и забота о экологической обстановке. Энергоэффективные методы, какие мы производим, способствуют не только дому, но и сохранению природной среды.
    Самое ключевое: <a href=https://ppu-prof.ru/>Утепление фасада дома цена</a> у нас открывается всего от 1250 рублей за квадратный метр! Это доступное решение, которое метаморфозирует ваш помещение в реальный теплый уголок с скромными затратами.
    Наши труды – это не просто изолирование, это создание пространства, в где каждый компонент символизирует ваш особенный модель. Мы учтем все твои пожелания, чтобы осуществить ваш дом еще дополнительно комфортным и привлекательным.
    Подробнее на <a href=https://ppu-prof.ru/>www.ppu-prof.ru</a>
    Не откладывайте труды о своем корпусе на потом! Обращайтесь к исполнителям, и мы сделаем ваш корпус не только уютнее, но и стильнее. Заинтересовались? Подробнее о наших работах вы можете узнать на нашем сайте. Добро пожаловать в мир удобства и высоких стандартов.

    380 ppu-prof_Pap   (20.01.2024 22:29) [Материал]
    Забота о резиденции - это забота о удовлетворении. Утепление наружных стен - это не только стильный внешний вид, но и обеспечение теплового комфорта в вашем уединенном уголке. Профессионалы, наша команда профессионалов, предлагаем вам превратить ваш дом в идеальное жилище.
    Выполненные нами проекты - это не просто тепловая обработка, это художественная работа с каждым элементом. Мы добиваемся совершенному сочетанию между формой и содержанием, чтобы ваш дом преобразился не только теплым, но и привлекательным.
    И самое существенное - доступная стоимость! Мы верим, что качественные услуги не должны быть дорогим удовольствием. <a href=https://ppu-prof.ru/>Утепление фасада квартиры снаружи цена</a> начинается всего от 1250 руб/кв. метр.
    Современные технологии и качественные материалы позволяют нам создавать утепление, обеспечивающее долговечность и надежность. Позабудьте о проблемах с холодом стен и избежите дополнительных расходов на отопление - наше утепление станет вашим надежной защитой от холода.
    Подробнее на <a href=https://ppu-prof.ru/>официальном сайте</a>
    Не откладывайте на потом заботу о радости жизни в вашем жилье. Обращайтесь к профессионалам, и ваш дом преобразится настоящим художественным творением, которое принесет вам не только тепло. Вместе мы создадим жилище, в котором вам будет по-настоящему уютно!

    379 Nosy   (16.05.2023 05:27) [Материал]
    <a href=https://asiancatalog.online>Таможенное оформление товаров из Китая - ASIANCATALOG</a>

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

    Официальное таможенное оформление товаров из Китая - это таможенное оформление которое выполняется в соответствии с таможенным законодательством ЕАЭС и к тому же защищенной законодательством Российской Федерации.

    Недостоверное таможенное оформление (карго) заключает чрезмерные риски утраты товара, уязвимо перед законом и не имеет правильных документов.

    Принимая во внимание то, что Российская Федерация придает отдельное внимание таможенному законодательству ЕАЭС, актуальность недостоверного таможенного оформления (карго) уменьшается. Кроме всего прочего, в случае если товары из Китая будут завезены на территорию России без сложностей, получатели встретятся с неприятной ситуацией недостижимости предстоящей продажи, кроме всего прочего и сбыта товаров на больших торговых площадках России. Вследствие чего мы предлагаем участникам внешнеторговой деятельности избирать официальное таможенное оформление и игнорировать серое таможенное оформление.

    При всём при этом, при экспедировании товара из Китая в крупные города и рынки России нужно направить внимание на задачи логистики.

    Специалисты по таможенному оформлению ASIANCATALOG обеспечивают поддержку малому и среднему бизнесу России при доставке товаров из Китая, выступая в качестве участника внешнеэкономической деятельности осуществляют таможенное оформление китайских товаров c выдачей официального пакета коммерческих документов для последующей реализации на внутреннем рынке и оказывают услуги по таможенному оформлению китайских товаров по договору услуги таможенного оформления, при импорте товаров из Китая под открытый внешнеторговый контракт клиента.

    Таможенное оформление товаров из Китая - это коммерческий вид деятельности компании, гарантирующий ответственность и за короткий срок проведение таможенного оформления с уплатой таможенных платежей. Мы предоставляем услуги таможенного оформления товаров из Китая юридическим лицам и физ. лицам, являющимися резидентами России и СНГ.

    378 DavidWex   (12.01.2023 22:41) [Материал]
    That means you'll perceive some fresh features and from access to additional channels where you can gain visibility, without having to modify nous of some elaborate, manual migration process. https://googlec5.com

    377 QwxJKNY   (17.11.2022 00:38) [Материал]
    Medicine information. Effects of Drug Abuse.
    <a href="https://cialissuperactive4us.top">generic cialis super active online</a> in USA
    Everything trends of meds. Get information here.

    376 Weaphy   (15.08.2022 04:35) [Материал]
    Таможенный декларант «ВЭД ЛАЙН» https://ved-line.ru это товары оптом, импортируемые из КНР в Российскую Федерацию высочайшего качества и по очень выгодным ценам. С нами вы сумеете незамедлительно подобрать на деле различные товары и закупить как небольшим так и большим оптом заинтересовавшую продукцию по цене поставщика. Воспользовавшись нашим сервисом, вы можете быть уверены, что получите услугу в предпочтении и заказе нужных товаров. Мы гарантируем их доставку точно к договоренному сроку. Рынок Китая на сегодняшний день пользуется большой признательностью, товары производимые в Китае, образовывают серьезную конкуренцию не только малознакомым товаропроизводителям, но и популярным торговым маркам. Совсем не столь давно в сознании каждого обывателя земли, товары произведенные в Поднебесной являлись удешевленным ширпотребом, но за последние небольшое количество лет ситуация переменилась. Поднебесная нынче считается реальным лидером по изготовлению продукции широкого потребления, на предприятиях Китая создают буквально все от различной сельхозпродукции и товаров для дачи, до инновационной электроники.

    375 Weaphy   (28.07.2022 12:46) [Материал]
    «ВЭД ЛАЙН» — таможенная компания, специализирующийся на балкерных грузоперевозках «от двери до двери». Вне зависимости от того, соответствуют ли вам базисные фрахтовые услуги или совокупные услуги, необходимые для нашего содействия в процедурах таможенного оформления ввоза товаров. «ВЭД ЛАЙН» https://ved-line.ru предлагает правильное совокупное намерение в интересах клиентов. Осуществляемые нами услуги в полной мере интегрированы с нашими преимуществами, чтобы вы являлись извещены о последнем статусе ваших товаров, на каком маршруте доставки бы они не находились. Наша компания профессионалов по экспедированию грузов помогает заказчикам разобраться со сложностями импортных обязательств и формировании пакета коммерческих документов, исполняя свободную обработку грузов. «ВЭД ЛАЙН» к тому же предлагает заказчикам использовать готовое решение для грузоперевозки большого объема груза на свободном морском транспорте грузоподъемностью три тысячи тон по условиям Инкотермс 2020 FOB порты Кореи — порт Находка Лесной Терминал — с погрузкой по жд или авто транспорт. Бизнес-предложение выстроено исключительно для развития вашего бизнеса.

    374 oymwag   (06.05.2022 22:12) [Материал]
    hydroxychloroquine risks <a href="https://keys-chloroquinehydro.com/#">can you buy chloroquine over the counter</a>

    373 Weari   (14.03.2022 21:50) [Материал]
    Таможенный агент «ВЭД ЛАЙН» все время следит за таможенными правилами наряду с тем несет, ответственность за правильную классификацию по ТН ВЭД ввозимых товаров по тысячам наименований. Объективно от того, оказываетесь ли вы участником внешнеторговой деятельности впервые или владельцем груза, мы прилагаем все усилия, с тем чтобы быстро пройти таможенное оформление https://ved-line.ru заказанных вами товаров и продукции, соблюдая все нормы таможенного законодательства. Наши таможенные специалисты сумеют рассчитать вашу цепочку поставок, чтобы развить таможенную деятельность, сократить затраты, определить допустимые категории риска и улучшить внутренний контроль и процедуры с целью обеспечения наилучшего соответствия требованиям. Мы работаем с вами, с тем чтобы организовать и представить всю нужную документацию, после того пройти таможенное оформление ваших товаров, удостовериться, что они в полной мере соответствуют таможенным правилам и требованиям, уплатить таможенные пошлины и налоги и сборы, в главном результате, отгрузить товары и продукцию в оговоренный пункт назначения.

    1-10 11-20 21-30 ... 371-380 381-382
    Имя *:
    Email *:
    Код *:
    Copyright vZ © 2024