Вопросы с контрольной
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;
}
Last updated