💀
Второй курс РПО
C#
C#
  • Типы данных и переменные
  • Массивы и списки
  • Управляющие конструкции
  • Методы
  • Классы и объекты
  • Инкапсуляция, наследование и полиморфизм
  • Интерфейсы
  • Обработка исключений
  • Работа с файлами
  • Делегаты и события
  • Краткие определения основных понятий
  • Вопросы с контрольной
  • Тестовые вопросы по темам
Powered by GitBook
On this page
  • Какие есть типы данных?
  • Как делать класс и зачем?
  • Исключения — как создать?
  • Как создать метод?
  • Что такое static?
  • Что такое наследование, полиморфизм и инкапсуляция?
  • Что такое интерфейс?
  • Чем абстрактный класс отличается от интерфейса?
  • Как читать файлы?
  • Как записать что-либо в файл?
  • Что такое делегат?
  • Что такое событие (триггер)?
  • Что такое nulladle?
  • Как обработать значение null?
  • Какие модификаторы доступа (в классах) есть?

Вопросы с контрольной

22.05.2025

Какие есть типы данных?

Ответ

Краткий ответ: Типы данных в C# делятся на значимые (int, double, bool, char) и ссылочные (string, object, массивы, классы).

Подробное объяснение: Типы данных определяют, какие значения может хранить переменная. Значимые типы содержат данные напрямую, например, int для целых чисел или bool для true/false. Ссылочные типы хранят ссылку на данные, например, string для текста. void — не тип, а индикатор отсутствия возвращаемого значения.

int number = 42; // Значимый тип
string name = "Алексей"; // Ссылочный тип

Как делать массив данных?

Краткий ответ: Массив создаётся с помощью типа, квадратных скобок [] и ключевого слова new.

Подробное объяснение: Массив — это набор элементов одного типа с фиксированным размером. Объявляется через указание типа и размера, либо с инициализацией значений. Доступ к элементам — по индексу (начинается с 0).

using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        int[] numbers = new int[3]; // Массив из 3 элементов
        numbers[0] = 1;
        numbers[1] = 2;
        numbers[2] = 3;
        // Или: int[] numbers = { 1, 2, 3 };
        WriteLine(numbers[1]); // Вывод: 2
    }
}

Как делать класс и зачем?

Ответ

Краткий ответ: Класс создаётся с помощью ключевого слова class, содержит поля и методы. Используется для моделирования объектов.

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

using static System.Console;

class Person
{
    public string Name;
    public int Age;

    public void Introduce()
    {
        WriteLine($"Я {Name}, мне {Age} лет");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Мария";
        person.Age = 20;
        person.Introduce(); // Вывод: Я Мария, мне 20 лет
    }
}

Исключения — как создать?

Ответ

Краткий ответ: Исключение создаётся через throw или наследованием от Exception.

Подробное объяснение: Исключения — это ошибки, возникающие при выполнении программы. Можно выбросить стандартное исключение с помощью throw или создать пользовательское, унаследовав от Exception. Пользовательские исключения полезны для специфичных ошибок.

using static System.Console;

class CustomException : Exception
{
    public CustomException(string message) : base(message) { }
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            throw new CustomException("Ошибка в программе!");
        }
        catch (CustomException ex)
        {
            WriteLine(ex.Message); // Вывод: Ошибка в программе!
        }
    }
}

Как создать метод?

Ответ

Краткий ответ: Метод создаётся с указанием возвращаемого типа, имени и параметров в классе.

Подробное объяснение: Метод — это блок кода для выполнения задачи. Указывается тип возвращаемого значения (или void, если ничего не возвращает), имя и параметры. Может быть статическим или экземплярным.

using static System.Console;

class Program
{
    static int Add(int a, int b)
    {
        return a + b;
    }

    static void Main(string[] args)
    {
        int result = Add(3, 4);
        WriteLine(result); // Вывод: 7
    }
}

Что такое static?

Ответ

Краткий ответ: static — модификатор, указывающий, что член класса принадлежит классу, а не объекту.

Подробное объяснение: Статические члены (поля, методы) доступны без создания экземпляра класса. Используются для общих данных или утилитных функций, например, математических операций.

using static System.Console;

class MathUtils
{
    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

class Program
{
    static void Main(string[] args)
    {
        WriteLine(MathUtils.Multiply(5, 3)); // Вывод: 15
    }
}

Что такое наследование, полиморфизм и инкапсуляция?

Ответ

Краткий ответ:

  • Наследование — использование членов базового класса в производном.

  • Полиморфизм — обработка объектов разных классов через общий интерфейс.

  • Инкапсуляция — скрытие данных с доступом через свойства или методы.

Подробное объяснение:

  • Наследование: Позволяет классу унаследовать поля и методы другого класса (: BaseClass).

  • Полиморфизм: Реализуется через virtual и override, позволяя переопределять поведение.

  • Инкапсуляция: Скрывает данные (private) и предоставляет доступ через свойства.

using static System.Console;

class Animal
{
    public virtual void Sound()
    {
        WriteLine("Звук");
    }
}

class Dog : Animal
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public override void Sound()
    {
        WriteLine("Гав!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Name = "Шарик";
        dog.Sound(); // Вывод: Гав!
        WriteLine(dog.Name); // Вывод: Шарик
    }
}

Что такое интерфейс?

Ответ

Краткий ответ: Интерфейс — контракт, определяющий методы и свойства без реализации.

Подробное объяснение: Интерфейс (interface) задаёт, какие методы или свойства должен реализовать класс. Класс может реализовать несколько интерфейсов. Используется для стандартизации поведения.

using static System.Console;

interface IAnimal
{
    void Sound();
}

class Cat : IAnimal
{
    public void Sound()
    {
        WriteLine("Мяу!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        IAnimal cat = new Cat();
        cat.Sound(); // Вывод: Мяу!
    }
}

Чем абстрактный класс отличается от интерфейса?

Ответ

Краткий ответ: Абстрактный класс может содержать реализацию методов и поля, интерфейс — только сигнатуры.

Подробное объяснение: Абстрактный класс (abstract) может иметь реализованные методы, поля и конструкторы, но не может быть создан напрямую. Интерфейс содержит только сигнатуры методов и свойств, без реализации. Класс наследует один абстрактный класс, но может реализовать много интерфейсов.

using static System.Console;

abstract class Animal
{
    public abstract void Sound();
    public void Eat() { WriteLine("Ем"); }
}

interface IAnimal
{
    void Sound();
}

class Dog : Animal, IAnimal
{
    public override void Sound()
    {
        WriteLine("Гав!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Sound(); // Вывод: Гав!
        dog.Eat(); // Вывод: Ем
    }
}

Как читать файлы?

Ответ

Краткий ответ: Используйте File.ReadAllText или StreamReader из System.IO.

Подробное объяснение: File.ReadAllText читает весь текст файла сразу. StreamReader позволяет читать файл построчно. Используйте using, чтобы автоматически закрыть файл.

using System.IO;
using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        string text = File.ReadAllText("example.txt");
        WriteLine(text);

        using (StreamReader reader = new StreamReader("example.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                WriteLine(line);
            }
        }
    }
}

Как записать что-либо в файл?

Ответ

Краткий ответ: Используйте File.WriteAllText или StreamWriter.

Подробное объяснение: File.WriteAllText записывает текст в файл, перезаписывая его. StreamWriter позволяет записывать построчно. using обеспечивает закрытие файла.

using System.IO;
using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        File.WriteAllText("output.txt", "Привет, файл!");

        using (StreamWriter writer = new StreamWriter("output.txt"))
        {
            writer.WriteLine("Строка 1");
            writer.WriteLine("Строка 2");
        }
    }
}

Что такое делегат?

Ответ

Краткий ответ: Делегат — тип, ссылающийся на метод с определённой сигнатурой.

Подробное объяснение: Делегат позволяет передавать методы как параметры. Объявляется через delegate, указывая возвращаемый тип и параметры. Используется для гибкой работы с методами.

using static System.Console;

delegate void MessageHandler(string message);

class Program
{
    static void Main(string[] args)
    {
        MessageHandler handler = ShowMessage;
        handler("Привет!"); // Вывод: Привет!
    }

    static void ShowMessage(string message)
    {
        WriteLine(message);
    }
}

Что такое событие (триггер)?

Ответ

Краткий ответ: Событие — механизм уведомления о действиях, использующий делегаты.

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

using static System.Console;

class Button
{
    public event Action OnClick;

    public void Click()
    {
        OnClick?.Invoke();
    }
}

class Program
{
    static void Main(string[] args)
    {
        Button button = new Button();
        button.OnClick += () => WriteLine("Кнопка нажата!");
        button.Click(); // Вывод: Кнопка нажата!
    }
}

Что такое nulladle?

Ответ

Краткий ответ: Nullable (значимый тип с возможностью null) — тип, который может быть null.

Подробное объяснение: Значимые типы (например, int) не могут быть null. Nullable типы (int?, double?) позволяют присваивать null, что полезно для необязательных данных.

using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        int? number = null;
        WriteLine(number.HasValue); // Вывод: False
        number = 42;
        WriteLine(number.Value); // Вывод: 42
    }
}

Как обработать значение null?

Ответ

Краткий ответ: Используйте проверку null, оператор ?. или значение по умолчанию.

Подробное объяснение: Для обработки null проверяйте значение через if, используйте оператор ?. (null-conditional) для безопасного доступа или ?? (null-coalescing) для значения по умолчанию.

using static System.Console;

class Program
{
    static void Main(string[] args)
    {
        string name = null;
        if (name == null)
        {
            WriteLine("Имя не задано");
        }

        string result = name ?? "Неизвестно";
        WriteLine(result); // Вывод: Неизвестно

        WriteLine(name?.Length); // Вывод: ничего (без ошибки)
    }
}

Какие модификаторы доступа (в классах) есть?

Ответ

Краткий ответ: public, private, protected, internal, protected internal.

Подробное объяснение: Модификаторы доступа определяют видимость членов класса:

  • public — доступно всем.

  • private — доступно только внутри класса.

  • protected — доступно в классе и производных классах.

  • internal — доступно в пределах сборки.

  • protected internal — доступно в сборке или производных классах.

using static System.Console;

class Example
{
    public int PublicField = 1;
    private int privateField = 2;
    protected int ProtectedField = 3;
    internal int InternalField = 4;
    protected internal int ProtectedInternalField = 5;
}
PreviousКраткие определения основных понятийNextТестовые вопросы по темам

Last updated 7 days ago