vbrus.narod.ru

Последнее обновление: 3 Ноября 2007 г.

Интересуетесь современными IT-технологиями? Заходите на специализированный портал посвященный IT-технологиям: rtportal.ru

 

Чтиво - программирование на C#(Sharp)

    1. C#.NET - Обзор языковых возможностей. - C#(Sharp)

    2. Часто задаваемые вопросы и ответы на них - C#(Sharp)

 

1. C#.NET - обзор языковых возможностей.

    Вместе с выпуском новой платформы .NET компания Microsoft представила новый язык, идеально подходящий для новой платформы - C# (читается "си шарп"). Станет ли он для Вас любимым и единственным или одним из постоянно используемых решать Вам, так как .NET дает такую возможность. Но на мой взгляд любой .NET программист должен знать C#, как язык специально созданный для работы с этой платформы.

    Тем более, что в нем многие найдут любимые черты. Он близок и 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.01 Как использовать в C# API-функции? - C#(Sharp)
    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();
    }

    }
    }


    Наверх


Hosted by uCoz