Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1447 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Лекция 3:

Обзор среды .NET Framework

Использование цикла foreach для перебора параметров

  • Замените в методе Main() цикл for на foreach, получив такой код
using System;
using System.Windows.Forms;
    
namespace MyApp
{
    class MyClass
    {
        // Точка входа может быть без аргументов
        static void Main(string[] args)
        {
            // Настройка консоли
            Console.Title = "";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
    
            // Выводим параметры на консоль
            Console.WriteLine("Печать аргументов:");
            foreach (string arg in args)
            {
                Console.WriteLine("Arg: {0}", arg);
            }
    
            Console.ReadLine();// Для задержки окна
        }
    }
}
Листинг 3.4 . Перебор параметров командной строки в методе Main() с помощью цикла foreach()
  • Постройте приложение - результат будет прежним

Извлечение параметров методом Environment.GetCommandLineArgs()

using System;
using System.Windows.Forms;
    
namespace MyApp
{
    class MyClass
    {
        static void Main()
        {
            // Настройка консоли
            Console.Title = "";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
    
            // Выводим параметры на консоль
            Console.WriteLine("Печать аргументов:");
    
            // Аргументы командной строки 
            // извлекаются классом Environment
            string[] theArgs = Environment.GetCommandLineArgs();
            Console.WriteLine("Путь к приложению: {0}", theArgs[0]);
            for (int i = 1; i < theArgs.Length; i++)
                Console.WriteLine("Аргумент: {0} ", theArgs[i]);
    
            Console.ReadLine();// Для задержки окна
        }
    }
}
Листинг 3.5 . Извлечение параметров другим способом
  • Постройте приложение - результат будет прежним

Создание объектов и их инициализация

Все объекты в C# создаются на куче и с помощью оператора new. Инициализация объектов при их создании выполняется функциями-членами класса, которые называются конструкторами. Конструкторы не нужно вызывать специально. Для статических классов существует только один статический конструктор, который не должен иметь аргументов. Они вызываются автоматически при создании объекта и только один раз. Повторно вызвать конструктор как метод для уже существующего объекта невозможно.

Для нестатических классов различают конструкторы по умолчанию и общие конструкторы. Конструктор по умолчанию не имеет аргументов. Программист может его определить сам или система предоставит его автоматически, если программистом не был объявлен ни один конструктор. Конструктор по умолчанию может быть у класса только один. Общие конструкторы имеют аргументы. Класс может иметь несколько общих конструкторов, только они должны различаться сигнатурой (количеством, типом и порядком следования аргументов), чтобы компилятор мог однозначно определить перегружаемый конструктор по сигнатуре в фактическом вызове.

Язык C# имеет существенное отличие от C++ в отношении конструктора по умолчанию. В C++ если программист не предусмотрел свой конструктор по умолчанию, то предоставляемый системой конструктор ничего с данными-членами класса не делает и они остаются неинициализированными. В C# конструктор по умолчанию, предоставляемый системой, производит инициализацию данных, большей частью нулем. Но если программист определил хоть один конструктор с параметрами, то конструктор по умолчанию системой уже не предоставляется и если он используется, то нужно определить свой конструктор по умолчанию, хоть с пустым телом.

Имена конструкторов должны совпадать с именем класса. Конструкторы должны имет модификатор доступа public.

Для иллюстрации сказанного продолжим модификацию нашего проекта консольного приложения MyApp в части объявления класса MyClass.

Упражнение 3

  • Модифицируйте класс следующим образом
using System;
using System.Windows.Forms;
    
namespace MyApp
{
    class MyClass
    {
        // Внутренние переменные - поля
        private int x, y;
    
        // Конструктор по умолчанию
        public MyClass() 
        {
            Console.WriteLine("Конструктор по умолчанию");
        }
    
        // Конструктор с параметрами
        public MyClass(int a, int b) 
        {
            Console.WriteLine("Конструктор с параметрами");
            x = a;
            y = b;
        }
    
        // Сервисы класса
        public int GetX() { return x; }
        public int GetY() { return y; }
    
        // Точка входа в программу без аргументов
        static void Main()
        {
            // Настройка консоли
            Console.Title = "";
            Console.ForegroundColor = ConsoleColor.White;
            Console.CursorVisible = false;
    
            // Создаем два объекта-экземпляра класса
            MyClass ob1 = new MyClass(); // Вызов конструктора по умолчанию
            Console.WriteLine("ob1: x = {0}; y = {1} \n", ob1.GetX(), ob1.GetY());
    
            MyClass ob2 = new MyClass(10, 15); // Вызов параметризованного конструктора
            Console.WriteLine("ob2: x = {0}; y = {1}", ob2.GetX(), ob2.GetY());
            Console.Read();
        }
    }
}
Листинг 3.6 . Введение конструкторов в класс MyClass
  • Постройте проект, чтобы получить результат

Мы видим, что поля x и y в первом объекте не остались брошенными, как это бы было в C++, а инициализировались нулями в соответствии с их типом. Такой порядок инициализации по умолчанию смысловым типом не относится к неинициализированным ссылкам. Их нужно обязательно инициализировать нулевым адресом с помощью ключевого слова null.

Деструкторы в C# применять не нужно, хотя они и предусмотрены синтаксисом. Программист не должен заботиться об освобождении затребованной у системы памяти на куче. Об этом позаботиться специальный механизм, который называется сборщиком мусора ( GC - Garbage Collector ). Сборщик мусора платформы .NET освободит память автоматически.

Максим Филатов
Максим Филатов

Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет:

Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.

 

Как активировать код?