3. Основы ООП Flashcards
Как определить класс на C#?
class MyClass { }
В чем разница между классом и объектом?
Объект — это экземпляр класса. Класс — это «чертеж» объекта.
В чем ошибка? Как исправить? class A { B b; } class B { int c; } var a = new A(); Console.WriteLine(a.b.c)
В поле b находится null и поэтому будет NullReferenceException
В чем ошибка? string a = null; var parts = a.Split(" ");
Как написать SafeSplit, чтобы не было NullReferenceException в коде string a = null; var parts = a.SafeSplit(" ");
В переменной a лежит null и поэтому будет NullReferenceException. SafeSplit должен быть методом-расширения. В этом случае он будет статическим и в нем можно обработать ситуацию a == null. При этом его можно будет вызвать как указано.
Как сделать в проекте 2 класса с одним именем?
Разместить их в разных пространствах имен (namespaces)
В чем ошибка? Как исправить?
struct A { B b; } struct B { int c; } var a = new A(); Console.WriteLine(a.b.c)
Ошибки нет, так как это struct.
В чем ошибка в коде?
public struct Point { public Point() { X = 0; Y = 0; } public int X; public int Y; }
У структуры нельзя переопределить конструктор по-умолчанию.
Что делать, если надо передать структуру в метод по ссылке?
Использовать ref.
Что такое boxing?
Неявное копирование структуры в кучу. Например, при upcast в object или реализуемый интерфейс.
Пусть Point — это структура, содержащая публичные поля X, Y и метод GetLength. В каких строчках есть ошибки и почему?
Point p; p.X = 5; var length = p.GetLength();
Только в третьей. Потому что нельзя использовать методы не инициализированной полностью структуры. А вот присвоить значение полю можно.
Что означает ключевое слово private?
Доступ к помеченному члену класса возможен только изнутри класса
Как модифицировать значения private-полей извне класса?
Напрямую — никак. Надо использовать методы класса, предусмотренные его автором, которые гарантируют целостность данных.
Что такое отложенная ошибка?
Это нарушение целостности данных, приводящее к ошибке не в момент нарушения, а намного позже
Что такое свойство?
Это пара методов: getter и setter, которые можно синтаксически использовать как поле, т.е. получать и присваивать ему значения
Сколько полей и методов будет сгенерировано компилятором при обработке этого свойства и какой у них будет уровень доступа (private, public)?
public string Name {get; private set;}
Одно приватное поле, один публичный метод, один приватный метод