3. Основы ООП Flashcards

1
Q

Как определить класс на C#?

A

class MyClass { }

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

В чем разница между классом и объектом?

A

Объект — это экземпляр класса. Класс — это «чертеж» объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
В чем ошибка? Как исправить? 
class A { B b; }
class B { int c; } 
var a = new A();
Console.WriteLine(a.b.c)
A

В поле b находится null и поэтому будет NullReferenceException

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
В чем ошибка?
string a = null;
var parts = a.Split(" ");
Как написать SafeSplit, чтобы не было NullReferenceException в коде 
string a = null;
var parts = a.SafeSplit(" ");
A

В переменной a лежит null и поэтому будет NullReferenceException. SafeSplit должен быть методом-расширения. В этом случае он будет статическим и в нем можно обработать ситуацию a == null. При этом его можно будет вызвать как указано.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Как сделать в проекте 2 класса с одним именем?

A

Разместить их в разных пространствах имен (namespaces)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

В чем ошибка? Как исправить?

struct A { B b; }
struct B { int c; }
var a = new A();
Console.WriteLine(a.b.c)
A

Ошибки нет, так как это struct.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

В чем ошибка в коде?

public struct Point
{
    public Point()
    {
      X = 0;
      Y = 0;
    }
    public int X;
    public int Y;
}
A

У структуры нельзя переопределить конструктор по-умолчанию.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Что делать, если надо передать структуру в метод по ссылке?

A

Использовать ref.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое boxing?

A

Неявное копирование структуры в кучу. Например, при upcast в object или реализуемый интерфейс.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Пусть Point — это структура, содержащая публичные поля X, Y и метод GetLength. В каких строчках есть ошибки и почему?

Point p; 
p.X = 5; 
var length = p.GetLength();
A

Только в третьей. Потому что нельзя использовать методы не инициализированной полностью структуры. А вот присвоить значение полю можно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Что означает ключевое слово private?

A

Доступ к помеченному члену класса возможен только изнутри класса

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Как модифицировать значения private-полей извне класса?

A

Напрямую — никак. Надо использовать методы класса, предусмотренные его автором, которые гарантируют целостность данных.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Что такое отложенная ошибка?

A

Это нарушение целостности данных, приводящее к ошибке не в момент нарушения, а намного позже

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что такое свойство?

A

Это пара методов: getter и setter, которые можно синтаксически использовать как поле, т.е. получать и присваивать ему значения

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Сколько полей и методов будет сгенерировано компилятором при обработке этого свойства и какой у них будет уровень доступа (private, public)?

public string Name {get; private set;}

A

Одно приватное поле, один публичный метод, один приватный метод

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Сколько полей и методов будет сгенерировано компилятором при обработке этого свойства и какой у них будет уровень доступа (private, public)?

public string Surname { get; }

A

Это сокращённый синтаксис для
public string Surname { get; private set; }
(Появился только в C# 6. Поэтому в 5 версии не скомпилируется)

17
Q

Как вызвать из одного конструктора другой конструктор того же класса, чтобы не дублировать код?

A

Используя this, например, так : Rectangle(int width, int height) : this(0, 0, width, height)

18
Q

Что означает, что поле readonly?

A

Его значение нельзя модифицировать после того, как отработал конструктор.

19
Q

В чем разница между константой и readonly static полем?

A

Разное время вычисления значения: const вычисляется в момент компиляции, static поле в момент запуска программы. Значение константы должно быть известно на момент компиляции, поэтому множество допустимых типов сильно ограничено.

20
Q

Когда выполняются статические конструкторы?

A

До того, как будут использованы статические или динамические поля, но не обязательно в начале программы.

21
Q

Что такое интерфейс (не путать с UI) в C#?

A

Контракт, обязательство класса содержать некоторые методы

22
Q

Что такое наследование и зачем оно нужно?

A

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

23
Q

Что такое upcast?

A

Приведение значения к родительскому типу. Объект не меняется — меняется точка зрения на него.

24
Q

Что такое полиморфизм и зачем он нужен?

A

Полиморфизм позволяет объектам производного класса обрабатываться как объектам базового класса или интерфейса. Таким образом, алгоритмы использующие в работе некоторый интерфейс могут быть применены ко всем классам-наследниками.При этом виртуальные методы и реализация интерфейса в каждом наследнике может быть различной.