Чтиво - программирование на C#(Sharp) |
1. C#.NET - обзор языковых возможностей.
Тем более, что в нем многие найдут любимые черты. Он близок и Delphi, и C++, и Java программистам. Данная статья не научит Вас программировать на этом современном языке. Моя цель дать Вам представления о возможностях языка, его преимуществах и области применимости, то есть основополагающий базис, который позволит заняться изучением синтаксических особенностей. Публикация рассчитана на инженеров, знакомых с основными понятиями современных. Основные характеристики языка. Коротко упомянем про некоторые из возможностей работы с языком. Подробнее с синтаксисом и примерами использования этих возможностей Вы можете ознакомиться на сайте www.dotsite.spb.ru . В языке для работы с событиями и обратными вызовами представлена новая концепция объектно-ориентированно и безопасной с точки зрения системы типов ссылки на функцию - "делегат". Именно эта концепция позволяет описывать события C# компонента без возвратных интерфейсов и дополнительных усилий, достаточно использовать ключевое слово event.Индексаторы и свойства органично дополняют события до создания описываемого сигнатурой компонента. Я постарался сделать эту статью как можно короче, чтобы люди, имеющие минимальный запас времени могли получить представление о C#. Для дальнейшего знакомства с языком, рекомендуем публикации на www.dotsite.spb.ru, а затем и спецификацию языка. Программиста, привыкший к платформе Майкрософт, может представить себе C# как промежуточный вариант между C++ и Visual Basic, если рассматривать сложность языковых конструкций и возможности языка. C# имеет C стиль синтаксиса (для управляющих конструкций, блоков кода, описания сигнатуры методов и др.), много общего с Java (отсутствие множественного наследования и шаблонов, наличие сборщика мусора) и Дельфи (ориентированность на создание компонент), в то же время имеет и свой колорит. При создании языка в основу дизайна легла легкость использования, доминирующая над мощностью языка и скоростью выполнения. Отсюда и сборщик мусора с управляемыми объектными ссылками, который автоматически освобождает за Вас память, отбирая при этом процессорное время. Вы также получаете безопасность работы с типами, а это по мнению многих является вторым важнейшим фактором избежания ошибок. C# объектно-ориентированный язык, как и вся платформа .NET. Более того, это язык, ориентированный на написание компонент. C# создан для программирования в управляемой среде с присутствующим сборщиком мусора, но позволяет писать и неуправляемый (unmanaged) код. Цельность концепции видна, скажем в реализации упаковки/распаковки. Это позволяет рассматривать все типы (даже примитивные) как объекты, что разрешает многие проблемы дизайна приложений. При создании языка рассматривалась не только простота написания приложений, но и их поддержки - в связи с чем в язык включили поддержку XML комментариев и контроля версий. Настоящий подарок для программистов. Помимо сборщика мусора и безопасности работы с типами для избежания ошибок в языке также применяется автоматическая инициализация переменных. Все типы, которые размещаются в стеке (value types, к которым относятся примитивные типы, структуры и прочие наследники класса ValueType) инициализируются нулями. Объекты остальных типов размещаются в куче, доступ к ним осуществляется по объектной ссылке, и ссылки эти инициализируются в значение null (которая говорит, что данная ссылка не имеет ассоциированного объекта в куче). В C# представлена концепция пространств имен, аналогичная пакетам в Java. Это позволяет иерархически структурировать Вашу систему типов, делая код намного более понятным и позволяя избежать проблем с именованием. Вы можете рассматривать пространства имен как директории, а языковые типы как файлы в этих директориях. Приятности. C# позволяет использовать при разработке парадигму атрибутивного программирования, когда в компиляционных модулях вместе с типом может сохраняться мета-информация. Данная информация впоследствии может быть получена и использована во время выполнения. Более того, этой информацией может воспользоваться компилятор или, скажем, дизайнер, что позволяет, не запуская компонент, получать информацию о нем. Работа с атрибутам позволяет использовать COM, COM+ и DLL в C# приложениях, работающих в среде .NET. Перечисления позволяют обезопасить работу с перечисляемыми типами. Реализация структур как типов, работа с которыми идет по значению, вкупе с возможностью использовать не только вложенные массивы (как в Java), но и многомерные позволяет оптимизировать производительность приложений. Выбор. При написании стандартных приложений под .NET трудно подобрать более подходящий язык, если Вы привыкли к синтаксису C-подобных языков. Если Вы хотите использовать шаблоны (templates, полиморфные типы), то сейчас Вам придется обратиться к C++. С другой стороны, шаблоны скорее всего будут реализованы во второй версии общеязыковой среды выполнения и C#. Если Вы не хотите отказываться от возможностей использования множественного наследования, то Вам стоит обратить внимание на Eiffel#. Если Вы привыкли к синтаксису и простоте бейсика, Ваш выбор наверняка падет на Visual Basic.NET. В любом случае стоит принять во внимание, что базовым языков одной из основных современных платформ разработки является именно C#, а это имеет отражение и на продуктах для разработчиков, которых для C# скорее всего будет больше чем для остальных языков, работающих под .NET. Заключение. Я постарался сделать эту статью как можно короче, чтобы люди, имеющие минимальный запас времени могли получить представление о C#. Для дальнейшего знакомства с языком, рекомендуем публикации на www.dotsite.spb.ru, а затем и спецификацию языка. Если возникли вопросы, пишите в форумы на сайте www.dotsite.spb.ru С уважением, Андрей Филёв. Microsoft Certified Solution Developer Об авторе: Андрей Филёв является ведущим консультантом созданной им компании dotSITE Ltd.Co., работает с .NET и C# почти два года. Источник: http://www.tdoc.ru/c/dotnet/csharp-net/csharp-language-overview.html Наверх | ||
2. Часто задаваемые вопросы
2.02 Как завершить программу? - C#(Sharp) 2.03 Как нарисовать точку? - C#(Sharp) 2.04 Как использовать MessageBox в C#? - C#(Sharp) 2.05 Как нарисовать иконку на форме? - C#(Sharp) 2.06 Как запустить программу в C#? - C#(Sharp) 2.07 Как показать диалог для выбора папки? - C#(Sharp) 2.08 Как показать диалог для выбора файла? - C#(Sharp) 2.09 Как узнать имя пользователя - C#(Sharp) 2.10 Как сделать паузу в C# - C#(Sharp) 2.11 Как узнать какие логические диски установлены в системе - C#(Sharp) 2.12 Как проиграть Wav файл в консольном приложении - C#(Sharp) 2.13 Как узнать сколько процессоров всего - C#(Sharp) 2.14 Как удалить файл - C#(Sharp) 2.15 Как найти все файлы с указанным расширением - C#(Sharp) 2.01 Как использовать в C# API-функции? ======================================================= using System; ... //Добавление пространства имен using System.Runtime.InteropServices; ... //Добавление заголовка [DllImport("user32.dll", EntryPoint="MessageBox")] public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType); ... private void button1_Click(object sender, System.EventArgs e) { //Вызов API-функции MessageBox(0, "Hello!", "Caption", 0); } ... 2.02 Как завершить программу в C#? ======================================================= Вот так: Application.Exit(); 2.03 Как нарисовать точку? в C#? ======================================================= protected override void OnPaint(PaintEventArgs e) { // TODO: Add Form1.OnPaint implementation e.Graphics.FillRectangle(new SolidBrush(Color.Black), 10, 10, 1, 1); base.OnPaint (e); } 2.04 Как использовать MessageBox в C#? ======================================================= MessageBox.Show("Hello World"); 2.05 Как нарисовать иконку на форме? ======================================================= protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; // Загружаем иконку. Icon icon = new Icon(@"c:\1.ico"); // Рисуем иконку на форме. g.DrawIcon(icon, 10, 10); base.OnPaint (e); } 2.06 Запуск приложения, которое должно обрабатывать файл с конкретным расширением в C# ======================================================= Объявляем: using System.Diagnostics; Далее кинь кнопку, вот к ней код: Process p = Process.Start(@"c:\инструкция.txt"); 2.07 Как показать диалог для выбора папки в c#? ======================================================= Кинь кнопку, вот к ней код: FolderBrowserDialog OpenFolder = new FolderBrowserDialog(); // Показываем надпись в наверху диалога. OpenFolder.Description = "Выбор каталога"; // Выбираем первоначальную папку. OpenFolder.SelectedPath = @"C:\"; // Показываем диалог. if (OpenFolder.ShowDialog()==DialogResult.OK) { // Изменяем залоговок окна на выбранную папку. MessageBox.Show(OpenFolder.SelectedPath); } 2.08 Как показать диалог для выбора файла в c#? ======================================================= На форму кинь TextBox, кнопку и компонент OpenFileDialog Вот код кнопки: DialogResult dr = openFileDialog1.ShowDialog(); if (dr == DialogResult.OK) textBox1.Text = openFileDialog1.FileName; 2.09 Как узнать имя пользователя через C#? ======================================================= using System; using System.Security.Principal; WindowsIdentity NameUser = WindowsIdentity.GetCurrent(); MessageBox.Show(NameUser.Name); 2.10 Как сделать паузу в C#? ======================================================= Вот примерчи, кинь на форму кнопку вот к ней код: MessageBox.Show("Hello"); System.Threading.Thread.Sleep(2000); 'интервал 2 секунды MessageBox.Show("Vbrus.narod.ru!!!"); 2.11 Как узнать какие логические диски установлены в системе - C#(Sharp) ======================================================= using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); GetLogicalDrives(); } private void GetLogicalDrives() { try { string[] drives = System.IO.Directory.GetLogicalDrives(); foreach (string driver in drives) { MessageBox.Show(driver); } } catch (System.IO.IOException) { MessageBox.Show("ERROR"); } } } } 2.12 Как проиграть Wav файл в консольном приложении - C#(Sharp) ======================================================= using System; using System.Runtime.InteropServices; namespace PlayWav { class Class1 { [DllImportAttribute("winmm.dll")] public static extern long PlaySound(String lpszName, long hModule, long dwFlags); [STAThread] static void Main(string[] args) { PlaySound(@"C:\WINDOWS\Media\town.wav", 0, 0); } } } 2.13 Как узнать сколько всего процессоров - C#(Sharp) ======================================================= Консольное приложение: using System; namespace ProcessorCount { class Class1 { [STAThread] static void Main(string[] args) { int am = System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity.ToInt32(); int processorCount = 0; while( am != 0 ) { processorCount++; am &= ( am - 1 ); } Console.WriteLine(processorCount); Console.ReadLine(); } } } 2.14 Как удалить файл - C#(Sharp) ======================================================= using System; namespace DeleteFile { class Class1 { [STAThread] static void Main(string[] args) { System.IO.FileInfo file = new System.IO.FileInfo(@"c:\HelloMy.txt"); file.Delete(); Console.ReadLine(); } } } 2.15 Как найти все файлы с указанным расширением - C#(Sharp) ======================================================= using System; namespace PoiskFile { class Class1 { [STAThread] static void Main(string[] args) { try { string[] dirs = System.IO.Directory.GetFiles(@"c:\", "*.TXT"); Console.WriteLine("Всего файлов {0}.", dirs.Length); foreach (string dir in dirs) { Console.WriteLine(dir); } } catch (Exception e) { Console.WriteLine("error {0}", e.ToString()); } Console.ReadLine(); } } } Наверх | ||