Объявление типа

Если говорить в общем, то при изучении языков C, C++ и C# вы заметите следующую особенность:

  • Программа на C — это набор функций и типов данных
  • Программа на C++ — это набор функций и классов
  • Суть же программы на C# заключается в наборе объявлений типов

Исходный код любого исполняемого файла C# (EXE) или динамической библиотеки (DLL) состоит из одного или нескольких объявлений типов.

У DLL отсутствует точка входа Main, а в исполняемом файле (EXE) обязательно нужно объявить как минимум один класс с методом Main — точкой запуска программы.

Крупное программное обеспечение содержит в исходном коде тысячи разных типов (классов и т.д.). Над большими проектами работает несколько программистов, каждый отвечает за свой модуль, поэтому неизбежно возникают одинаковые имена типов. Как избежать конфликтов имен? Для этого и нужны «пространства имен», о которых мы говорили ранее.

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

Проще говоря, пространство имен добавляет групповое название набору классов. Чтобы обратиться к этим классам из другого места, нужно указывать данное групповое название.

Представьте класс, где есть два ученика с одинаковым именем и фамилией — учителя и одноклассники не смогут различить их только по имени. Чтобы отделить их, используют дополнительные пометки, например Том из группы А и Том из группы Б. Эти пометки А и Б выполняют роль пространств имен.

Приведенный ниже код демонстрирует программу с тремя объявлениями типов, все типы определены внутри пространства имен с названием MyProgram.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HelloDemo // Объявление пространства имен
{

    class A                  // Объявление типа A (класс)
    {
        void Fun1() // Функция
        {
            // Логика программы
        }
    }

    class B                  // Объявление типа B (класс)
    {
        void Fun1() // Функция
        {
            // Логика программы
        }
    }

    class C                  // Объявление типа C (класс)
    {
        static void Main(string[] args) // Точка входа Main
        {
            double pi = 3.14;
            string webSite = "foxdevelop.com";
            Console.WriteLine($"The Pi is {pi} and the website is {webSite}.");
        }
    }

}
Code language: PHP (php)

Мы подробно разберем пространства имен в следующих уроках.

Тип — это шаблон

Поскольку программа на C# по сути является набором объявлений типов, основа изучения C# — это освоить создание и использование типов. Сначала нужно понять:

Что такое тип (Type)

Тип можно воспринимать как шаблон для создания структур данных: сам он не является готовой структурой данных, но определяет все характеристики объектов, создаваемых по этому шаблону.

Тип — это лишь чертеж, он сам не занимает память; память выделяется и данные сохраняются только после инстанцирования.

Тип — это чертеж, по которому создаются реальные объекты. Это похоже на чертеж дома: по одному чертежу можно построить множество отдельных домов.

Каждый тип определяется тремя составляющими:

  1. Имя
  2. Структура для хранения данных членов
  3. Поведение и ограничения

В C# всё является типом, включая встроенные базовые типы.

Ниже два стандартных встроенных типа: short и int.

Их структура выглядит так:

Тип shortТип int
Имя: shortИмя: int
Структура: занимает 2 байтаСтруктура: занимает 4 байта
Поведение: 16-битное целое числоПоведение: 32-битное целое число
  • Имя: идентификатор типа (int/string/название пользовательского класса)
  • Структура хранения: задает объем занимаемой памяти и расположение полей (например, short всегда занимает 2 байта)
  • Ограничения поведения: определяет допустимые операции, диапазон значений и встроенные методы (например, для int доступны арифметические операции, диапазон значений -2^31 ~ 2^31-1)

Инстанцирование (Instantiate)

Создание реального рабочего объекта данных по шаблону типа с помощью ключевого слова new

Объект (object) = Экземпляр (instance)

Возьмем те же типы int и short: по ним можно создавать экземпляры. В примере ниже переменные pi, age, nums — это экземпляры, созданные по типам double, int и short соответственно.

namespace HelloDemo 
{

    class Program
    {
        static void Main(string[] args)
        {
            double pi = 3.14;
            int age = 12;
            short nums = 23;
        }
    }

}Code language: JavaScript (javascript)

В C# абсолютно все переменные и данные программы — это экземпляры какого-либо типа, данных без типа не существует.

Смотрите предыдущий пример кода

Класс C из примера является точкой входа программы и удовлетворяет требованиям для исполняемого файла:

  • Это пользовательский тип внутри пространства имен MyProgram
  • Содержит статический метод Main без возвращаемого значения — точку запуска приложения

В C# есть не только тип class

Все объявляемые типы C#: класс (class), структура (struct), интерфейс (interface), перечисление (enum), делегат (delegate), запись (record)

BCL (Base Class Library — Базовая библиотека классов): стандартная встроенная библиотека .NET, содержит предопределенные системные типы int, short, string, List<T> и другие, которые разработчик может сразу инстанцировать и использовать.

Объявление типа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *