
3. Константы и поля.pptx
- Количество слайдов: 16
Члены типа. Константы и поля. Кафедра МОи. АИС Скорнякова А. Ю. ayuskornyakova@mesi. ru
Члены типа Константа Пользовательский тип Поле Конструктор экземпляра Конструктор типа Метод Перегруженный оператор Оператор преобразования Свойство Событие Тип
Члены типа internal class My. Example. Class { //Константа, неизменяемое и статическое изменяемое поле private const Int 32 Some. Constant = 1; private readonly String Some. String = "2"; private static Int 32 Some. Read. Wrote. Field = 3; //Конструктор типа static My. Example. Class() { } //Конструкторы экземпляров public My. Example. Class() { } public My. Example. Class(Int 32 x) { } //Экземплярный и статический методы private String Instance. Method() { return public static void Static. Method() { } null; } //Свойство public Int 32 Some. Property { get { return 0; } set { } } //Экземплярное событие public event Event. Handler Some. Event; //Возведение события protected virtual void On. Some. Event() { Event. Handler handler = Some. Event; if (handler != null) handler(this, Event. Args. Empty); } }
Доступ к членам типа Модификаторы доступа к членам
Понятие ключевого слова static Ключевое слово static может быть применено к следующим конструкциям: • • • Данные класса; Методы класса; Свойства класса; Конструктор; Целое определение класса.
Статические классы Static разрешается применять только к классам, но не к структурам (значимым типам ) , поскольку CLR всегда разрешает создавать экземпляры значимых типов, и нет способа обойти это ограничение. • Класс должен быть прямым потомком System. Object - наследование любому другому базовому классу лишено смысла, поскольку наследование применимо только к объектам, а создать экземпляр статического класса невозможно. • Класс не должен реализовывать никаких интерфейсов, поскольку методы интерфейса можно вызывать только через экземпляры класса. • В классе можно определять только статические члены (поля, методы, свойства и события). Любые экземплярные члены вызовут ошибку компиляции. • Класс нельзя использовать в качестве поля, параметра метода или локальной переменной, поскольку это подразумевает существование переменной, ссылающейся на экземпляр, что запрещено. Обнаружив подобное обращение со статическим классом, компилятор вернет сообщение об ошибке.
Константы Константа (constant) - это идентификатор, значение которого никогда не меняется. При определении идентификатора константы компилятор должен получить его значение во время компиляции. Поскольку значение констант никогда не меняется, константы всегда считаются частью типа. Иначе говоря, константы считаются статическими, а не экземплярными членами. internal class My. Example. Class { private const Int 32 Some. Constant = 1; private static readonly Int 32 Some. Static. Readonly;
Поля Поле (field) - это член данных, который хранит экземпляр значимого типа или ссылку на ссылочный тип.
Поля public class Some. Type { //Статическое неизменяемое поле. Значение рассчитывается и сохраняется в памяти при инициализации класса во время выполнения public static readonly Random Some. Random = new Random(); //Cтатическое изменяемое поле private static Int 32 Number. Of. Writes = 0; //Неизменяемое экземплярное поле public readonly String Path. Name = "Untitled"; //Изменяемое экземплярное поле public System. IO. File. Stream My. File. Stream; }
Поля Неизменность поля ссылочного типа означает неизменность ссылки, которую этот тип содержит, а вовсе не объекта, на которую указывает ссылка! public class AType { public static readonly char[] Char. Array = new char[]{'A', 'B', 'C'}; } private static void Main(string[] args) { foreach (var c in AType. Char. Array) Console. Write("{0}, ", c); Console. Write. Line(); AType. Char. Array[0] = 'X'; AType. Char. Array[1] = 'Y'; AType. Char. Array[2] = 'Z'; foreach (var c in AType. Char. Array) Console. Write("{0}, ", c); }
Методы. Конструктор экземпляров и структуры (значимые типы). struct Size { public Int 32 m_x, m_y; } struct Some. Struct { private int _i; private double _d; } Size size 1 = new Size(); Size size 2 = default(Size); struct Some. Struct { private int _i; private double _d; //вызываем “конструктор по умолчанию” public Some. Struct(int i) : this() { _i = i; public Some. Struct(int i) { _i = i; } } Field 'My. Console. Application. Some. Struct. _d' must be fully assigned before control is returned to the caller // Поле _d инициализировано неявно! } }
Методы. Конструктор типа. • По умолчанию у типа не определено конструктора. • У типа может быть один и только один конструктор. • У конструкторов типов никогда не бывает параметров. class Some. Struct { public static int _c ; static Some. Struct() { _c = -1; } } private static void Main(string[] args) { Console. Write. Line(Some. Struct. _c); }
Методы расширения
Методы расширения class Program { static void Main(string[] args) { List
Методы. Ключевые слова virtual и override. Методы, помеченные ключевым словом virtual, называются виртуальными методами.
Вопросы к экзамену • Члены типа. Доступ к членам типа. • Понятие static. • Константы • Поля • Методы. Конструктор экземпляров и структуры (значимые типы). • Методы. Конструктор типа. • Методы расширения • Частичные методы (partial methods)