Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]

Презентация:



Advertisements
Похожие презентации
Методы классов. Методы класса [атрибуты][модификаторы] {void|тип_результата_функции} имя_метода ([список_формальных_аргументов]) { тело метода} Список.
Advertisements

С# и ООП Формальное определение класса с C# Класс в C# - это пользовательский тип данных (user defined type), который состоит из данных (часто называемых.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 7 Методы как средство реализации операций Лекции читает кандидат технических наук.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Массивы в С#. Массивом называют упорядоченную последовательность элементов одного типа. Каждый элемент массива имеет индексы, определяющие порядок элементов.
Классы в C#. Две роли классов Класс Класс – это модуль, архитектурная единица построения программной системы. Модульность построения – основное свойство.
Лекция 2: Описание класса 1. Поля 2. Методы 3. Конструкторы.
Делегаты Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
В С# предусмотрены средства для создания пользовательских классов-контейнеров, к внутренним элементам которых можно обращаться при помощи того же оператора.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Синтаксис языка Java. Символы и синтаксис Перевод строчки эквивалентен пробелу Регистр в именах различается.
Основы ООП и C# Работа с объектами и классами. Классы Класс специальный тип данных для описания объектов. Он определяет данные и поведение типа. Определение.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
Высокоуровневые методы информатики и программирования Лекция 14 Интерфейсы.
Работа с массивами в C#. Массивы в С# Массивы в С# с точки зрения синтаксиса практически не отличаются от массивов в С, C++ и Java. Однако внутренне массив.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
ИТЕРАТОРЫ И LINQ Лекция 1. Интерфейс IEnumerable и IEnumerator Любая коллекция реализует интерфейс IEnumerable. public interface IEnumerable : IEnumerable.
Транксрипт:

Классы в С#

Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы] enum имя_перечисления [: базовый класс] {список_возможных_значений} перечисления могут быть объявлены непосредственно в пространстве имен проекта или могут быть вложены в описание класса. Последний вариант часто применяется, когда перечисление используется в одном классе и имеет атрибут доступа private; константы разных перечислений могут совпадать. Имя константы всегда уточняется именем перечисления; константы могут задаваться словами русского языка; разрешается задавать базовый класс перечисления; разрешается задавать начальный элемент подмножества, на которое проецируется множество значений перечисления. enum EmpType { Manager = 10, Grunt = 1,Contractor = 100,VP = 99 }

Базовый класс System.Enum GetUnderlyingType() – возвращает тип данных, используемый для представления числовых значений элементов перечисления: Console.WriteLine(Enum.GetUnderlyingType(typeof(EmpType))); Enum.Format() - возвращает значимые имена элементов перечисления по их числовым значениям : EmpType fred; fred = EmpType.Contractor; Console.WriteLine("You area {0}, Enum.Format(typeof(EmpType), fred, "G")); GetValues() - возвращает экземпляр System.Array, где каждому элементу массива соответствует член указанного перечисления : Array obj = Enum.GetValues(typeof(EmpType)); foreach(EmpType e in obj) { Console.Write("String name: {0}", Enum.Format(typeof(EmpType), e, "G")); Console.Write( ({0})", Enum.Format(typeof(EmpType), e, "D")); } свойство IsDefined- позволяет определить, является ли выбранная вами символьная строка элементом указанного перечисления if(Enum.IsDefined(typeof(EmpType), "SalesPerson"))...

Структуры в С# могут определять конструкторы (только принимающие параметры); могут реализовывать интерфейсы; могут содержать любое количество внутренних членов. [атрибуты][модификаторы] struct имя_структуры [:список_интерфейсов] {тело_структуры} struct Employee { public EmpType title; // Одно из полей – перечисление public string name; public short deptID; } class StructTester { public static int Main(string[] args) { Employee fred; fred.deptID = 40; fred.name = "Fred"; fred.title = EmpType.Grunt; return 0; }

struct Employee { public EmpType title; public string name; public short deptID; // Конструктор public Employee (EmpType et, string n, short d) { title = et; name = n; deptID = d; } class StructTester { public static int Main(string[] args) { // Для вызова конструктора используется ключевое слово new Employee maгу =new Employee (EmpType.VP, "Mary", 10); return 0; } public void Displ ayEmpStats (Employee e) { Console.WriteLine(Here is {0}\'s info:", e.name); Console.WriteLine("Department ID: {0}", e.deptID); Console.WriteLine(Title: {0}", Enum.Format(typeof(EmpType), e.title, "G")); } Конструкторы в структурах

Упаковка и распаковка в структурах // Создаем и упаковываем нового сотрудника Employee stan = new Employee (EmpType.Grunt, "Stan", 10); object stanlnBox = stan; public void UnboxThisEmployee(object о) { // Распаковка в структуру Employee для получения доступа ко всем полям Employee temp = (Employee)o; Console.WriteLine(temp.name + "is alive!"); } Вызов метода: // Передаем упакованного сотрудника на обработку t.UnboxThisEmployee(stanlnBox); Можно и так. Происходит автоматическая упаковка. t.UnboxThisEmployee(stan); Передаем упакованны й объект

Методы класса [атрибуты][модификаторы]{void| тип_результата_функции} имя_метода([список_формальных_аргументов]) { тело метода} Список формальных аргументов разделяются на группы: входные, выходные обновляемые. [ref|out|params] тип_аргумента имя_аргумента

// Аргументы могут быть разного типа. void A(out long p2, int p1) { p2 =(long) Math.Pow(p1,3); Console.WriteLine("Метод A-1"); } void A(out long p2, params int[] p) { p2=0; for(int i=0; i

Функции с побочным эффектом Функция называется функцией с побочным эффектом, если помимо результата, вычисляемого функцией и возвращаемого ей в операторе return, она имеет выходные аргументы с ключевыми словами ref и out. int f(ref int a) { return(a++); } public void TestSideEffect() { // тестирование побочного эффекта int a = 0, b=0, c=0; a =1; b = a + f(ref a); a =1; c = f(ref a)+ a; Console.WriteLine("a={0}, b={1}, c={2}",a,b,c); }

Классы [атрибуты][модификаторы] class имя_класса [:список_родителей] {тело_класса} Модификаторы: new, abstract, sealed, private, protected, public, internal В теле класса могут быть объявлены: константы; поля; конструкторы и деструкторы; методы; события; делегаты; классы (структуры, интерфейсы, перечисления).

class Employee { private string fullName; private int empID; private float currPay; public Employee() {} public Employee(string fullName, int empID, float currPay) { this. fullName = fullName; this.empID = empID; this. currPay = currPay; } public void GiveBonus(float amount) { currPay += amount; } public virtual void DisplayStats() { Console. WriteLine("Name: {0}", fullName); Console.WriteLine(Pay: {0}", currPay); Console.WriteLine(ID: {0}", empID); } public static void Main() { Employee e = new Employee(Joe", 80, 30000); e.GiveBonus(200); Employee e2; e2 = new Employee("Beth", 81, 50000); e2.GiveBonus(1000); e2.DisplayStats(); }

Методы-свойства Стратегии доступа к полю: чтение, запись (Read, Write); чтение, запись при первом обращении (Read, Write-once); только чтение (Read-only); только запись (Write-only); ни чтения, ни записи (Not Read, Not Write).

public class Person { string fam="", status="", health=""; int age=0, salary=0; public string Fam {//стратегия: Чтение, запись при первом обращении set {if (fam == "") fam = value;} get {return(fam);} } public string Status {//стратегия: Только чтение get {return(status);} } public int Age { //стратегия: Чтение, запись set { age = value; if(age < 7) status ="ребенок"; else if(age

Индексаторы ….. const int Child_Max = 10; //максимальное число детей Person[] children = new Person[Child_Max]; int count_children=0; //число детей public Person this[int i] {//индексатор get { if (i>=0 && i< count_children) return(children[i]); else return(children[0]); } set { if (i==count_children && i< Child_Max) { children[i] = value; count_children++; } public int Count_children { get {returm (count_children);} }

public void TestPersonChildren(){ Person pers1 = new Person(), pers2 = new Person(); pers1.Fam = "Петров"; pers1.Age = 42; pers1.Salary = 10000; pers1[pers1.Count_children] = pers2; pers2.Fam ="Петров"; pers2.Age = 21; pers2.Salary = 1000; Person pers3= new Person("Петрова"); pers1[pers1.Count_children] = pers3; pers3.Fam ="Петрова"; pers3.Age = 5; Console.WriteLine ("Фам={0}, возраст={1}, статус={2}", pers1.Fam, pers1.Age, pers1.Status); Console.WriteLine ("Сын={0}, возраст={1}, статус={2}", pers1[0].Fam, pers1[0].Age, pers1[0].Status); Console.WriteLine ("Дочь={0}, возраст={1}, статус={2}", pers1[1].Fam, pers1[1].Age, pers1[1].Status); }

Конструкторы и деструктор Person pers1 = new Person(); Person pers3= new Person("Петрова"); static Person(){ Console.WriteLine("Выполняется статический конструктор!"); } ~Person(){ //Код деструктора }