🗊Презентация Организация пользовательских подпрограмм, методов класса. Лекция 21

Нажмите для полного просмотра!
Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №1Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №2Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №3Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №4Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №5Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №6Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №7Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №8Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №9Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №10Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №11Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №12Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №13Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №14Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №15Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №16Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №17Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №18Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №19Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №20Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №21Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №22Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №23Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №24Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №25Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №26Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №27Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №28Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №29Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №30Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №31Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №32Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №33Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №34Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №35Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №36Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №37Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №38Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №39Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №40Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №41Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №42Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №43Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №44Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №45Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №46Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №47Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №48Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №49Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №50Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №51Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №52Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №53Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №54Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №55Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №56Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №57Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №58Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №59Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №60Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №61Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №62Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №63Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №64Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №65Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №66Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №67Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №68Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №69Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №70Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №71Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №72Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №73Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №74Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №75Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №76Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №77Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №78Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №79Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №80Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №81Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №82Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №83Организация пользовательских подпрограмм, методов класса. Лекция 21, слайд №84

Содержание

Вы можете ознакомиться и скачать презентацию на тему Организация пользовательских подпрограмм, методов класса. Лекция 21. Доклад-сообщение содержит 84 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Организация пользовательских подпрограмм, методов класса
Описание слайда:
Организация пользовательских подпрограмм, методов класса

Слайд 2





Подпрограммы
Подпрограмма (функция) представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Она описывается один раз, а вызываться может столько раз, сколько необходимо. Одна и та же функция может обрабатывать различные данные, переданные ей в качестве аргументов.
Описание слайда:
Подпрограммы Подпрограмма (функция) представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Она описывается один раз, а вызываться может столько раз, сколько необходимо. Одна и та же функция может обрабатывать различные данные, переданные ей в качестве аргументов.

Слайд 3





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

Слайд 4





Подпрограммы
Функции (подпрограммы), определенные в классе, называются методами. В C# определить подпрограмму вне класса нельзя, поэтому все подпрограммы - это методы.
[модификаторы] тип_возвращаемого_значения 
название_функции (метода) ([параметры])
{
    // тело функции (метода)
}
Описание слайда:
Подпрограммы Функции (подпрограммы), определенные в классе, называются методами. В C# определить подпрограмму вне класса нельзя, поэтому все подпрограммы - это методы. [модификаторы] тип_возвращаемого_значения название_функции (метода) ([параметры]) {     // тело функции (метода) }

Слайд 5





Модификаторы
static делает метод доступным только через класс, в котором он определяется, но не через экземпляры объектов этого класса.
public (открытые), доступны любому методу любого класса.
protected (защищенные), доступны методам класса А и методам классов, производных от класса А.
internal  (внутренние), доступны методам любого класса в сборке класса А.
private (закрытые), доступны только методам класса А.
Описание слайда:
Модификаторы static делает метод доступным только через класс, в котором он определяется, но не через экземпляры объектов этого класса. public (открытые), доступны любому методу любого класса. protected (защищенные), доступны методам класса А и методам классов, производных от класса А. internal (внутренние), доступны методам любого класса в сборке класса А. private (закрытые), доступны только методам класса А.

Слайд 6





Модификаторы
virtual (виртуальный) — метод может переопределяться. 
abstract (абстрактный) — метод должен обязательно переопределяться в не абстрактных производных классах (может использоваться только в абстрактных классах). 
override (переопределенный) — метод переопределяет какой-то метод, определенный в базовом классе. 
sealed (герметизированный) — в метод больше не могут вноситься изменения ни в каких производных классах, т.е. метод не может переопределяться в производных классах. Может использоваться вместе с ключевым словом override.
extern (внешний) — определение метода находится в каком-то другом месте.
Описание слайда:
Модификаторы virtual (виртуальный) — метод может переопределяться. abstract (абстрактный) — метод должен обязательно переопределяться в не абстрактных производных классах (может использоваться только в абстрактных классах). override (переопределенный) — метод переопределяет какой-то метод, определенный в базовом классе. sealed (герметизированный) — в метод больше не могут вноситься изменения ни в каких производных классах, т.е. метод не может переопределяться в производных классах. Может использоваться вместе с ключевым словом override. extern (внешний) — определение метода находится в каком-то другом месте.

Слайд 7





Методы
Описание слайда:
Методы

Слайд 8





Методы
Определение метода в консольном приложении: 
static <возвращаемый_тип> <имя_функции> (){ 
      return <возвращаемое_значение>; 
} 
public void MyMeth() { 
     // ... 
     if (done) return; 
     // ...
} 
 int Sqr(int i) { 
         return (i * i); 
   }
Описание слайда:
Методы Определение метода в консольном приложении: static <возвращаемый_тип> <имя_функции> (){ return <возвращаемое_значение>; } public void MyMeth() { // ... if (done) return; // ... } int Sqr(int i) { return (i * i); }

Слайд 9





Методы
Если член класса объявляется как static, то он становится доступным до создания любых объектов своего класса и без ссылки на какой-нибудь объект. С помощью ключевого слова static можно объявлять как переменные, так и методы.
Для того чтобы воспользоваться членом типа static за пределами класса, достаточно указать имя этого класса с оператором-точкой. Но создавать объект для этого не нужно.
Описание слайда:
Методы Если член класса объявляется как static, то он становится доступным до создания любых объектов своего класса и без ссылки на какой-нибудь объект. С помощью ключевого слова static можно объявлять как переменные, так и методы. Для того чтобы воспользоваться членом типа static за пределами класса, достаточно указать имя этого класса с оператором-точкой. Но создавать объект для этого не нужно.

Слайд 10





Методы
Ограничения на применение методов типа static: 
• В методе типа static должна отсутствовать ссылка this, поскольку такой метод не выполняется относительно какого-либо объекта. 
• В методе типа static допускается непосредственный вызов только других методов типа static, но не метода экземпляра из того самого же класса. Нестатический метод может быть вызван из статического метода только по ссылке на объект.
• Для метода типа static непосредственно доступными оказываются только другие данные типа static, определенные в его классе (метод, в частности, не может оперировать переменной экземпляра своего класса).
Описание слайда:
Методы Ограничения на применение методов типа static: • В методе типа static должна отсутствовать ссылка this, поскольку такой метод не выполняется относительно какого-либо объекта. • В методе типа static допускается непосредственный вызов только других методов типа static, но не метода экземпляра из того самого же класса. Нестатический метод может быть вызван из статического метода только по ссылке на объект. • Для метода типа static непосредственно доступными оказываются только другие данные типа static, определенные в его классе (метод, в частности, не может оперировать переменной экземпляра своего класса).

Слайд 11





Пример 1
namespace ConsoleAppFunc{
    /* в пространстве имен нельзя размещать переменные и подпрограммы, но можно пользовательские типы данных: классы, структуры, ... */
      class Pr {
            public static int Val = 100;
            static public void Met(){ // необходим public 
                                    // для видимости в другом классе
               Val = 200;
                Console.WriteLine("Met, Val = " + Val);
            }
            public string SMet(){      // не static 
                 return ("Stroka");
            }
     }
Описание слайда:
Пример 1 namespace ConsoleAppFunc{ /* в пространстве имен нельзя размещать переменные и подпрограммы, но можно пользовательские типы данных: классы, структуры, ... */ class Pr { public static int Val = 100; static public void Met(){ // необходим public // для видимости в другом классе Val = 200; Console.WriteLine("Met, Val = " + Val); } public string SMet(){ // не static return ("Stroka"); } }

Слайд 12





Пример 1
class Program {
        static void Method1()  {
            Console.WriteLine("Method1");
        }
        void Method2()  {            // не static
            Console.WriteLine("Method2");
        }
        static  int Sqr(int i) { 
            return (i * i); 
        } 
         double Rez(int i) {
            return ((i*1.0) / 10);
        }
Описание слайда:
Пример 1 class Program { static void Method1() { Console.WriteLine("Method1"); } void Method2() { // не static Console.WriteLine("Method2"); } static int Sqr(int i) { return (i * i); } double Rez(int i) { return ((i*1.0) / 10); }

Слайд 13





Пример 1
      static void Main(string[] args) {
    // вызов статических методов и переменных
            Pr.Val = 1;   // доступ к переменной через класс
            Pr.Met();  // доступ к методу через класс, Val = 200
            Method1();   // вызов метода отдельным оператором
            Console.Write("Введите целое число - ");
            int i = Convert.ToInt32(Console.ReadLine());
            int a = Sqr(i);
            Console.WriteLine(i + " в квадрате равно " + a);
 // вызов методов с помощью ссылки на объект класса
            Program p = new Program();
            // т. к. Method2 не static, 
            // то нужна p - ссылка на объект класса Program
Описание слайда:
Пример 1 static void Main(string[] args) { // вызов статических методов и переменных Pr.Val = 1; // доступ к переменной через класс Pr.Met(); // доступ к методу через класс, Val = 200 Method1(); // вызов метода отдельным оператором Console.Write("Введите целое число - "); int i = Convert.ToInt32(Console.ReadLine()); int a = Sqr(i); Console.WriteLine(i + " в квадрате равно " + a); // вызов методов с помощью ссылки на объект класса Program p = new Program(); // т. к. Method2 не static, // то нужна p - ссылка на объект класса Program

Слайд 14





Пример 1
             p.Method2();
            Console.Write("Введите целое число - ");
            int j = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(j + " / 10 = " + p.Rez(j));
            Pr pp = new Pr();  // pp - ссылка на объект класса Pr
            string s = pp.SMet();
            Console.WriteLine("Результат метода SMet класса Pr:   " + s);
            Console.ReadKey();
        }
    }
}
Описание слайда:
Пример 1 p.Method2(); Console.Write("Введите целое число - "); int j = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(j + " / 10 = " + p.Rez(j)); Pr pp = new Pr(); // pp - ссылка на объект класса Pr string s = pp.SMet(); Console.WriteLine("Результат метода SMet класса Pr: " + s); Console.ReadKey(); } } }

Слайд 15





Параметры методов
Параметры используются для обмена информацией с методом. Параметры, описываемые в заголовке метода, определяют множество значений аргументов, которые можно передавать в метод. Для каждого параметра должны задаваться его тип и имя.
static  double Sum(int i, double j) { 
      return (i + j); 
}
Описание слайда:
Параметры методов Параметры используются для обмена информацией с методом. Параметры, описываемые в заголовке метода, определяют множество значений аргументов, которые можно передавать в метод. Для каждого параметра должны задаваться его тип и имя. static double Sum(int i, double j) { return (i + j); }

Слайд 16





Параметры методов
Правила соответствия формальных и фактических параметров: главное требование при передаче параметров состоит в том, что аргументы при вызове метода должны записываться в том же порядке, что и в заголовке метода, и должно существовать неявное преобразование типа каждого аргумента к типу соответствующего параметра. Количество аргументов должно соответствовать количеству параметров.
Описание слайда:
Параметры методов Правила соответствия формальных и фактических параметров: главное требование при передаче параметров состоит в том, что аргументы при вызове метода должны записываться в том же порядке, что и в заголовке метода, и должно существовать неявное преобразование типа каждого аргумента к типу соответствующего параметра. Количество аргументов должно соответствовать количеству параметров.

Слайд 17





Параметры методов
int y = 3;
double x = 0.9; double S = Sum(y, x);
Console.WriteLine(S);
Описание слайда:
Параметры методов int y = 3; double x = 0.9; double S = Sum(y, x); Console.WriteLine(S);

Слайд 18





Параметры методов
Существуют два способа передачи параметров: по значению и по ссылке.
При передаче по значению (по умолчанию ) формальные параметры метода получают копии значений аргументов, и операторы метода работают с этими копиями. Доступа к исходным значениям аргументов у метода нет, а, следовательно, изменения, вносимые в параметр метода, не оказывают никакого влияния на аргумент, используемый для вызова.
Описание слайда:
Параметры методов Существуют два способа передачи параметров: по значению и по ссылке. При передаче по значению (по умолчанию ) формальные параметры метода получают копии значений аргументов, и операторы метода работают с этими копиями. Доступа к исходным значениям аргументов у метода нет, а, следовательно, изменения, вносимые в параметр метода, не оказывают никакого влияния на аргумент, используемый для вызова.

Слайд 19





Параметры методов
При передаче по ссылке (по адресу) метод получает копии адресов аргументов, он осуществляет доступ к ячейкам памяти по этим адресам и может изменять исходные значения аргументов, модифицируя параметры.
В C# предусмотрено четыре типа параметров:
- параметры-значения;
- параметры-ссылки — описываются с помощью ключевого слова ref;
- выходные параметры — описываются с помощью ключевого слова out;
- параметры-массивы — описываются с помощью ключевого слова params.
Описание слайда:
Параметры методов При передаче по ссылке (по адресу) метод получает копии адресов аргументов, он осуществляет доступ к ячейкам памяти по этим адресам и может изменять исходные значения аргументов, модифицируя параметры. В C# предусмотрено четыре типа параметров: - параметры-значения; - параметры-ссылки — описываются с помощью ключевого слова ref; - выходные параметры — описываются с помощью ключевого слова out; - параметры-массивы — описываются с помощью ключевого слова params.

Слайд 20





Пример 2
using System; 
class Test { 
      public int a, b; 
           public Test() { }
      public Test(int i, int j) {   
            a = i; 
            b = j; 
      }
Описание слайда:
Пример 2 using System; class Test { public int a, b; public Test() { } public Test(int i, int j) { a = i; b = j; }

Слайд 21





Пример 2
/* Этот метод не оказывает никакого влияния на 
          аргументы, используемые для его вызова. */ 
      public void NoChange(int i, int j){ //параметры-значения
             i = i + j; 
             j = -j; 
      } 
      /* Передать объект. Теперь переменные ob.a и ob.b из объекта, используемого в вызове метода, будут изменены. */ 
      public void Change(Test ob) { // ссылочный параметр
           ob.a = ob.a + ob.b; 
           ob.b = -ob.b; 
      } 
}
Описание слайда:
Пример 2 /* Этот метод не оказывает никакого влияния на аргументы, используемые для его вызова. */ public void NoChange(int i, int j){ //параметры-значения i = i + j; j = -j; } /* Передать объект. Теперь переменные ob.a и ob.b из объекта, используемого в вызове метода, будут изменены. */ public void Change(Test ob) { // ссылочный параметр ob.a = ob.a + ob.b; ob.b = -ob.b; } }

Слайд 22





Пример 2
  class CallByValue { 
    static void Main() { 
       Test ob = new Test(); 
       int a = 15, b = 20; 
       Console.WriteLine ("а и b до вызова: " + a + "  " + b); 
       ob.NoChange(a, b); 
       Console.WriteLine("а и b после вызова: " + a + "  " + b); 
       Test ob1 = new Test(15, 20); 
       Console.WriteLine("ob1.a и ob1.b до вызова: " + ob1.a +"  "+ ob1.b);   // 15   20
       ob1.Change(ob1); 
       Console.WriteLine("ob1.a и ob1.b после вызова: " + ob1.a + "  " + ob1.b);    //  35    -20
      } 
}
Описание слайда:
Пример 2 class CallByValue { static void Main() { Test ob = new Test(); int a = 15, b = 20; Console.WriteLine ("а и b до вызова: " + a + " " + b); ob.NoChange(a, b); Console.WriteLine("а и b после вызова: " + a + " " + b); Test ob1 = new Test(15, 20); Console.WriteLine("ob1.a и ob1.b до вызова: " + ob1.a +" "+ ob1.b); // 15 20 ob1.Change(ob1); Console.WriteLine("ob1.a и ob1.b после вызова: " + ob1.a + " " + ob1.b); // 35 -20 } }

Слайд 23





Параметры методов
Модификатор параметра ref принудительно организует вызов по ссылке, а не по значению. Этот модификатор указывается как при объявлении, так и при вызове метода.
Описание слайда:
Параметры методов Модификатор параметра ref принудительно организует вызов по ссылке, а не по значению. Этот модификатор указывается как при объявлении, так и при вызове метода.

Слайд 24





Пример 3
class RefTest { 
      public void Sqr(ref int i, int j) { 
       // Метод изменяет свой аргумент
            i = i * i; 
            j++;
     } 
 }
Описание слайда:
Пример 3 class RefTest { public void Sqr(ref int i, int j) { // Метод изменяет свой аргумент i = i * i; j++; } }

Слайд 25





Пример 3
class RefDemo { 
   static void Main() { 
     RefTest ob = new RefTest (); 
     int a = 10, b = 0; 
     Console.WriteLine("а до вызова: " + a);   // 10
     Console.WriteLine("b до вызова: " + b);   // 0
     ob.Sqr(ref a, b); // применение модификатора ref 
     Console.WriteLine("а после вызова: " + а); // 100
     Console.WriteLine("b после вызова: " + b);    // 0
     } 
}
Описание слайда:
Пример 3 class RefDemo { static void Main() { RefTest ob = new RefTest (); int a = 10, b = 0; Console.WriteLine("а до вызова: " + a); // 10 Console.WriteLine("b до вызова: " + b); // 0 ob.Sqr(ref a, b); // применение модификатора ref Console.WriteLine("а после вызова: " + а); // 100 Console.WriteLine("b после вызова: " + b); // 0 } }

Слайд 26





Параметры методов
Модификатор параметра out подобен модификатору ref, за одним исключением: он служит только для передачи значения за пределы метода. Поэтому переменной, используемой в качестве параметра out, не нужно (да и бесполезно)  присваивать какое-то значение. Более того, в методе параметр out считается неинициализированным, т.е. предполагается, что у него отсутствует первоначальное значение. Это означает, что значение должно быть присвоено данному параметру в методе до его завершения.
Описание слайда:
Параметры методов Модификатор параметра out подобен модификатору ref, за одним исключением: он служит только для передачи значения за пределы метода. Поэтому переменной, используемой в качестве параметра out, не нужно (да и бесполезно) присваивать какое-то значение. Более того, в методе параметр out считается неинициализированным, т.е. предполагается, что у него отсутствует первоначальное значение. Это означает, что значение должно быть присвоено данному параметру в методе до его завершения.

Слайд 27





Пример 4
class Decompose { 
    public int GetParts(double n, out double frac){
         int whole; 
         whole = (int) n; 
         frac = n - whole; // передать дробную 
         // часть числа через параметр frac 
         return whole;    // возвратить целую
                                    // часть числа 
    } 
}
Описание слайда:
Пример 4 class Decompose { public int GetParts(double n, out double frac){ int whole; whole = (int) n; frac = n - whole; // передать дробную // часть числа через параметр frac return whole; // возвратить целую // часть числа } }

Слайд 28





Пример 4
class UseOut { 
    static void Main() { 
      Decompose ob = new Decompose(); 
      int i; 
      double f, a; 
      Console.Write("Введите вещественное число - ");
      a = Convert.ToDouble(Console.ReadLine());  
      i = ob.GetParts(a, out f); 
      Console.WriteLine("Для вещественного числа " + a + ":");  
      Console.WriteLine("Целая часть числа равна " + i); // 10
      Console.WriteLine("Дробная часть числа равна " + f);//0.125
      } 
}
Описание слайда:
Пример 4 class UseOut { static void Main() { Decompose ob = new Decompose(); int i; double f, a; Console.Write("Введите вещественное число - "); a = Convert.ToDouble(Console.ReadLine()); i = ob.GetParts(a, out f); Console.WriteLine("Для вещественного числа " + a + ":"); Console.WriteLine("Целая часть числа равна " + i); // 10 Console.WriteLine("Дробная часть числа равна " + f);//0.125 } }

Слайд 29





Параметры методов
Применение модификаторов ref и out не ограничивается только передачей значений обычных типов. С их помощью можно также передавать ссылки на объекты. Если модификатор ref или out указывает на ссылку, то сама ссылка передается по ссылке. Это позволяет изменить в методе объект, на который указывает ссылка.
Описание слайда:
Параметры методов Применение модификаторов ref и out не ограничивается только передачей значений обычных типов. С их помощью можно также передавать ссылки на объекты. Если модификатор ref или out указывает на ссылку, то сама ссылка передается по ссылке. Это позволяет изменить в методе объект, на который указывает ссылка.

Слайд 30





Пример 5
class RefSwap { 
   int a, b; 
   public RefSwap(int i, int j) { 
       a = i; 
       b = j; 
   }
   public void Show() { 
      Console.WriteLine ("a: {0}, b: {1}", a, b); 
  }
Описание слайда:
Пример 5 class RefSwap { int a, b; public RefSwap(int i, int j) { a = i; b = j; } public void Show() { Console.WriteLine ("a: {0}, b: {1}", a, b); }

Слайд 31





Пример 5
   // Этот метод изменяет свои аргументы
    public void Swap(ref RefSwap ob1, ref RefSwap ob2) { 
        RefSwap t; 
        t = ob1; 
        ob1 = ob2; 
        ob2 = t; 
    } 
}
Описание слайда:
Пример 5 // Этот метод изменяет свои аргументы public void Swap(ref RefSwap ob1, ref RefSwap ob2) { RefSwap t; t = ob1; ob1 = ob2; ob2 = t; } }

Слайд 32





Пример 5
class RefSwapDemo { 
  static void Main() { 
    RefSwap x = new RefSwap(1, 2); 
    RefSwap у = new RefSwap(3, 4); 
    Console.Write("x до вызова: "); 
    x.Show();  // х до вызова: а: 1, b: 2
    Console.Write("у до вызова: "); 
    у. Show ();  // у до вызова: а: 3, b: 4
    Console.WriteLine ();
Описание слайда:
Пример 5 class RefSwapDemo { static void Main() { RefSwap x = new RefSwap(1, 2); RefSwap у = new RefSwap(3, 4); Console.Write("x до вызова: "); x.Show(); // х до вызова: а: 1, b: 2 Console.Write("у до вызова: "); у. Show (); // у до вызова: а: 3, b: 4 Console.WriteLine ();

Слайд 33





Пример 5
    // Смена объектов, на которые 
    // ссылаются аргументы х и у. 
     х.Swap(ref x, ref у); 
     Console.Write("х после вызова: "); 
     х.Show();  // х после вызова: а: 3, b: 4
     Console.Write("у после вызова: "); 
     у.Show();   // у после вызова: а: 1, b: 2
  } 
}
Описание слайда:
Пример 5 // Смена объектов, на которые // ссылаются аргументы х и у. х.Swap(ref x, ref у); Console.Write("х после вызова: "); х.Show(); // х после вызова: а: 3, b: 4 Console.Write("у после вызова: "); у.Show(); // у после вызова: а: 1, b: 2 } }

Слайд 34





Параметры методов
Ссылка может использоваться как результат функции. Для возвращения из функции ссылки в сигнатуре функции перед возвращаемым типом, а также после оператора return следует указать ключевое слово ref.
Описание слайда:
Параметры методов Ссылка может использоваться как результат функции. Для возвращения из функции ссылки в сигнатуре функции перед возвращаемым типом, а также после оператора return следует указать ключевое слово ref.

Слайд 35





Пример 6
static void Main(string[] args){
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7 };
    // найти число 4 в массиве 
    ref int numberRef = ref Find(4, numbers);
    numberRef = 9; // заменить 4 на 9  Console.WriteLine(numbers[3]); // 9  Console.Read();
}
Описание слайда:
Пример 6 static void Main(string[] args){ int[] numbers = { 1, 2, 3, 4, 5, 6, 7 }; // найти число 4 в массиве ref int numberRef = ref Find(4, numbers); numberRef = 9; // заменить 4 на 9 Console.WriteLine(numbers[3]); // 9 Console.Read(); }

Слайд 36





Пример 6
static ref int Find(int number, int[] numbers){
   for (int i = 0; i < numbers.Length; i++) {
     if (numbers[i] == number) {
        return ref numbers[i]; 
    // возвращается ссылка на адрес, 
    // а не само значение 
     } 
   }  throw new IndexOutOfRangeException("число не найдено");
}
Описание слайда:
Пример 6 static ref int Find(int number, int[] numbers){ for (int i = 0; i < numbers.Length; i++) { if (numbers[i] == number) { return ref numbers[i]; // возвращается ссылка на адрес, // а не само значение } } throw new IndexOutOfRangeException("число не найдено"); }

Слайд 37





Параметры методов
C# позволяет использовать необязательные параметры. Для таких параметров необходимо объявить значение по умолчанию. Псле необязательных параметров все последующие параметры также должны быть необязательными.
При вызове метода значения для параметров передаются в порядке объявления этих параметров в методе. Но можно нарушить подобный порядок, используя именованные параметры. Именованы должны быть все пераметры.
Описание слайда:
Параметры методов C# позволяет использовать необязательные параметры. Для таких параметров необходимо объявить значение по умолчанию. Псле необязательных параметров все последующие параметры также должны быть необязательными. При вызове метода значения для параметров передаются в порядке объявления этих параметров в методе. Но можно нарушить подобный порядок, используя именованные параметры. Именованы должны быть все пераметры.

Слайд 38





Пример 7
static int OptionalParam(int x, int y, int z=5, int s=4){
    return x + y + z + s;
}    ...
static void Main(string[] args){
    Console.WriteLine (OptionalParam(2, 3));        // 14
    Console.WriteLine (OptionalParam(2,3,10));    // 19
    // использование именованных параметров
   Console.WriteLine (OptionalParam(x:2, y:3));   // 14  
    // Необязательный параметр z использует
    // значение по умолчанию
   Console.WriteLine (OptionalParam(s:10, y:2, x:3)); // 20
   Console.ReadLine();
}
Описание слайда:
Пример 7 static int OptionalParam(int x, int y, int z=5, int s=4){     return x + y + z + s; } ... static void Main(string[] args){     Console.WriteLine (OptionalParam(2, 3)); // 14 Console.WriteLine (OptionalParam(2,3,10)); // 19 // использование именованных параметров Console.WriteLine (OptionalParam(x:2, y:3));  // 14      // Необязательный параметр z использует // значение по умолчанию    Console.WriteLine (OptionalParam(s:10, y:2, x:3)); // 20  Console.ReadLine(); }

Слайд 39





Параметры методов
Язык С# позволяет указывать один (и только один последний в списке параметров) специальный параметр для функции - массив параметров. 
Используя ключевое слово params, можно передавать в метод неопределенное количество параметров. Этот способ передачи параметров надо отличать от передачи массива в качестве параметра.
Описание слайда:
Параметры методов Язык С# позволяет указывать один (и только один последний в списке параметров) специальный параметр для функции - массив параметров. Используя ключевое слово params, можно передавать в метод неопределенное количество параметров. Этот способ передачи параметров надо отличать от передачи массива в качестве параметра.

Слайд 40





Пример 8
static void Addition(params int[] integers){ 
 // передача параметра с params
    int result = 0;
    for (int i = 0; i < integers.Length; i++)  {
        result += integers[i];
    }
    Console.WriteLine(result);
}
…
Описание слайда:
Пример 8 static void Addition(params int[] integers){ // передача параметра с params     int result = 0;     for (int i = 0; i < integers.Length; i++)  {         result += integers[i];     }     Console.WriteLine(result); } …

Слайд 41





Пример 8
static void AdditionMas(int[] integers, int k){
  // передача массива
    int result = 0;
    for (int i = 0; i < integers.Length; i++) {
        result += (integers[i]*k);
    }
    Console.WriteLine(result);
}
 ...
Описание слайда:
Пример 8 static void AdditionMas(int[] integers, int k){ // передача массива     int result = 0;     for (int i = 0; i < integers.Length; i++) {         result += (integers[i]*k);     }     Console.WriteLine(result); }  ...

Слайд 42





Пример 8
static void Main(string[] args){
    Addition(1, 2, 3, 4, 5); 
    int[] array = new int[] { 1, 2, 3, 4 };
     Addition(array); 
     Addition();
    AdditionMas(array, 2);
    Console.ReadLine();
}
static void Addition(params int[] integers, int x, string mes) {}   // ошибка!
Описание слайда:
Пример 8 static void Main(string[] args){     Addition(1, 2, 3, 4, 5);      int[] array = new int[] { 1, 2, 3, 4 };      Addition(array);  Addition();     AdditionMas(array, 2);     Console.ReadLine(); } static void Addition(params int[] integers, int x, string mes) {} // ошибка!

Слайд 43





Область видимости (контекст) переменных
Каждая переменная доступна в рамках определенного контекста или области видимость. Вне этого контекста переменная уже не существует.
Существуют различные контексты:
- Контекст класса. Переменные, определенные на уровне класса, доступны в любом методе этого класса.
- Контекст метода. Переменные, определенные на уровне метода, являются локальными и доступны только в рамках данного метода. В других методах они недоступны.
- Контекст блока кода. Переменные, определенные на уровне блока кода, также являются локальными и доступны только в рамках данного блока. Вне своего блока кода они не доступны.
Описание слайда:
Область видимости (контекст) переменных Каждая переменная доступна в рамках определенного контекста или области видимость. Вне этого контекста переменная уже не существует. Существуют различные контексты: - Контекст класса. Переменные, определенные на уровне класса, доступны в любом методе этого класса. - Контекст метода. Переменные, определенные на уровне метода, являются локальными и доступны только в рамках данного метода. В других методах они недоступны. - Контекст блока кода. Переменные, определенные на уровне блока кода, также являются локальными и доступны только в рамках данного блока. Вне своего блока кода они не доступны.

Слайд 44





Пример 9
class Program{ // начало контекста класса
    static int a = 9; // переменная уровня класса - глорбальная 
    static void Main(string[] args) {
        int b = a - 1; // локальная переменная
             ...
          { // начало контекста блока кода             
             int c = b - 1; // переменная уровня блока кода
           }  // конец блока кода, переменная с уничтожается 
         //  Console.WriteLine(c);  // ошибка! 
         //  Console.WriteLine(d);  // ошибка!
          Display();
          Console.Read(); 
    } // конец Main, переменная b уничтожается
Описание слайда:
Пример 9 class Program{ // начало контекста класса     static int a = 9; // переменная уровня класса - глорбальная      static void Main(string[] args) {    int b = a - 1; // локальная переменная   ...         { // начало контекста блока кода                          int c = b - 1; // переменная уровня блока кода      }  // конец блока кода, переменная с уничтожается           // Console.WriteLine(c); // ошибка!           // Console.WriteLine(d); // ошибка! Display();          Console.Read();      } // конец Main, переменная b уничтожается

Слайд 45





Пример 9
    static void Display(){ // начало метода Display       
        int a = 5;   // локальная переменная
        int d = Program.a + 1;  // использование 
                                             // глобальной переменной
        Console.WriteLine(d);           
        d = a + 1; //использование локальной переменной
        Console.WriteLine(d); 
      } // конец контекста метода Display, 
         // переменная d уничтожается 
} // конец контекста класса, переменная a уничтожается
Описание слайда:
Пример 9 static void Display(){ // начало метода Display      int a = 5; // локальная переменная       int d = Program.a + 1; // использование // глобальной переменной Console.WriteLine(d);      d = a + 1; //использование локальной переменной Console.WriteLine(d);       } // конец контекста метода Display, // переменная d уничтожается  } // конец контекста класса, переменная a уничтожается

Слайд 46





Организация закрытого и открытого доступа
 - Члены, используемые только в классе, должны быть закрытыми. 
- Данные экземпляра, не выходящие за определенные пределы значений, должны быть закрытыми, а при организации доступа к ним с помощью открытых методов следует выполнять проверку диапазона представления чисел.
Описание слайда:
Организация закрытого и открытого доступа - Члены, используемые только в классе, должны быть закрытыми. - Данные экземпляра, не выходящие за определенные пределы значений, должны быть закрытыми, а при организации доступа к ним с помощью открытых методов следует выполнять проверку диапазона представления чисел.

Слайд 47





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

Слайд 48





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

Слайд 49





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

Слайд 50





Пример 10
class MyClass { 
    private int alpha; // закрытый доступ, 
                                 // указываемый явно 
    int beta; // закрытый доступ по умолчанию 
    public int gamma; // открытый доступ 
    public void SetAlpha(int a) { // открытый доступ 
    alpha = а; // Член класса может иметь доступ
                    // к закрытому члену этого же класса.
    public int GetAlpha() { // открытый доступ 
       return alpha; 
    }
Описание слайда:
Пример 10 class MyClass { private int alpha; // закрытый доступ, // указываемый явно int beta; // закрытый доступ по умолчанию public int gamma; // открытый доступ public void SetAlpha(int a) { // открытый доступ alpha = а; // Член класса может иметь доступ // к закрытому члену этого же класса. public int GetAlpha() { // открытый доступ return alpha; }

Слайд 51





Пример 10
   public void SetBeta(int a) {// открытый доступ 
        beta = a; 
    } 
    public int GetBeta() { // открытый доступ 
        return beta; 
    } 
}
Описание слайда:
Пример 10 public void SetBeta(int a) {// открытый доступ beta = a; } public int GetBeta() { // открытый доступ return beta; } }

Слайд 52





Пример 10
class AccessDemo { 
   static void Main() { 
      MyClass ob = new MyClass(); 
       // Доступ к членам alpha и beta данного класса 
       // разрешен только посредством его методов. 
      ob.SetAlpha(-99); 
      ob.SetBeta(9) ; 
      Console.WriteLine("ob.alpha равно " + ob.GetAlpha()); 
      Console.WriteLine("ob.beta равно " + ob.GetBeta());
Описание слайда:
Пример 10 class AccessDemo { static void Main() { MyClass ob = new MyClass(); // Доступ к членам alpha и beta данного класса // разрешен только посредством его методов. ob.SetAlpha(-99); ob.SetBeta(9) ; Console.WriteLine("ob.alpha равно " + ob.GetAlpha()); Console.WriteLine("ob.beta равно " + ob.GetBeta());

Слайд 53





Пример 10
    // Следующие виды доступа к членам alpha
    // и beta данного класса не разрешаются. 
    // ob.alpha = 10; // Ошибка! alpha - закрытый член! 
    // ob.beta =9; // Ошибка! beta - закрытый член! 
    // Член gamma данного класса доступен 
    // непосредственно, поскольку он 
    // является открытым. 
           ob.gamma = 99; 
    } 
}
Описание слайда:
Пример 10 // Следующие виды доступа к членам alpha // и beta данного класса не разрешаются. // ob.alpha = 10; // Ошибка! alpha - закрытый член! // ob.beta =9; // Ошибка! beta - закрытый член! // Член gamma данного класса доступен // непосредственно, поскольку он // является открытым. ob.gamma = 99; } }

Слайд 54





Свойства
[ атрибуты ] [ спецификаторы ] тип имя_свойства{
      [ get код_доступа ] 
      [ set код_доступа ]
}
public, private и т.д.
virtual, override и abstract
Описание слайда:
Свойства [ атрибуты ] [ спецификаторы ] тип имя_свойства{ [ get код_доступа ] [ set код_доступа ] } public, private и т.д. virtual, override и abstract

Слайд 55





Свойства
В блоках get должно обязательно присутствовать возвращаемое значение типа свойства, т. е. он должен содержать оператор return. 
Функция set присваивает значение закрытому полю. Здесь можно применять ключевое слово value, которое содержит устанавливаемое значение. 
Можно опускать тот или иной блок и тем самым создавать свойства, доступные только для записи или только для чтения (в частности, пропуск блока get позволяет обеспечивать доступ только для записи, а пропуск блока set — доступ только для чтения). 
Описание слайда:
Свойства В блоках get должно обязательно присутствовать возвращаемое значение типа свойства, т. е. он должен содержать оператор return. Функция set присваивает значение закрытому полю. Здесь можно применять ключевое слово value, которое содержит устанавливаемое значение. Можно опускать тот или иной блок и тем самым создавать свойства, доступные только для записи или только для чтения (в частности, пропуск блока get позволяет обеспечивать доступ только для записи, а пропуск блока set — доступ только для чтения). 

Слайд 56





Пример 11
public class MyClass { 
       public readonly string Name; 
       private int intVal; 
       public int Val {      
           get {  return intVal;  } 
          set { 
              if (value > = 0 && value <= 10) intVal = value; 
              else  throw (new ArgumentOutOfRangeException("Val = ", value, ",  Val может присваиваться только значение в диапазоне от 0 до 10.")); 
          } 
      }
Описание слайда:
Пример 11 public class MyClass { public readonly string Name; private int intVal; public int Val { get { return intVal; } set { if (value > = 0 && value <= 10) intVal = value; else throw (new ArgumentOutOfRangeException("Val = ", value, ", Val может присваиваться только значение в диапазоне от 0 до 10.")); } }

Слайд 57





Пример 11
     public override string ToString() { 
          return "Name:  " + Name + "\nVal:  " + Val; 
      } 
       private MyClass() : this("Default Name") {  } 
              // конструктор
       public MyClass(string newName)  { 
           Name = newName; 
           intVal = 0; 
      } 
}
Описание слайда:
Пример 11 public override string ToString() { return "Name: " + Name + "\nVal: " + Val; } private MyClass() : this("Default Name") { } // конструктор public MyClass(string newName) { Name = newName; intVal = 0; } }

Слайд 58





Пример 11
public class Program {
   static void Main(string [ ] args) { 
      Console.WriteLine("Создание объекта myObj..."); 
      MyClass myObj = new MyClass("My Object"); 
      Console.WriteLine("Объект myObj создан."); 
      for (int i = -1; i <= 0; i++)        {
         try { 
            Console.WriteLine("\n Попытка присвоить myObj.Val значение {0}...", i); 
            myObj.Val = i; 
            Console.WriteLine("Значение {0} присвоено myObj.Val.", myObj.Val); 
         }
Описание слайда:
Пример 11 public class Program { static void Main(string [ ] args) { Console.WriteLine("Создание объекта myObj..."); MyClass myObj = new MyClass("My Object"); Console.WriteLine("Объект myObj создан."); for (int i = -1; i <= 0; i++) { try { Console.WriteLine("\n Попытка присвоить myObj.Val значение {0}...", i); myObj.Val = i; Console.WriteLine("Значение {0} присвоено myObj.Val.", myObj.Val); }

Слайд 59





Пример 11
       catch (Exception e) { 
             Console.WriteLine("Сгенерировано {0} исключение.", e.GetType().FullName); 
              Console.WriteLine("Сообщение:\n\"{0}\"", e.Message); 
         }
     }
      Console.WriteLine("\n Вывод myObj.ToString()..."); 
      Console.WriteLine(myObj.ToString ()); 
      Console.WriteLine("myObj.ToString() Вывод."); 
      Console.ReadKey(); 
  }
Описание слайда:
Пример 11 catch (Exception e) { Console.WriteLine("Сгенерировано {0} исключение.", e.GetType().FullName); Console.WriteLine("Сообщение:\n\"{0}\"", e.Message); } } Console.WriteLine("\n Вывод myObj.ToString()..."); Console.WriteLine(myObj.ToString ()); Console.WriteLine("myObj.ToString() Вывод."); Console.ReadKey(); }

Слайд 60





Конструкторы
Каждый объект (переменная типа класс) содержит свой экземпляр полей класса. Методы находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов нестатических экземпляров с полями именно того объекта, для которого они были вызваны. Для этого в любой нестатический метод автоматически передается скрытый параметр this, в котором хранится ссылка на вызвавший функцию экземпляр.
Описание слайда:
Конструкторы Каждый объект (переменная типа класс) содержит свой экземпляр полей класса. Методы находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов нестатических экземпляров с полями именно того объекта, для которого они были вызваны. Для этого в любой нестатический метод автоматически передается скрытый параметр this, в котором хранится ссылка на вызвавший функцию экземпляр.

Слайд 61





Конструкторы
Описание слайда:
Конструкторы

Слайд 62





Конструкторы
Конструктор - метод класса - предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new:
- Имя конструктора совпадает с именем класса.
- Конструктор не возвращает значение, даже типа void.
- Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации.
- Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, автоматически вызывается конструктор базового класса без параметров (конструктор по умолчанию), который полям значимых типов присваивает нуль, полям ссылочных типов — значение null.
Описание слайда:
Конструкторы Конструктор - метод класса - предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new: - Имя конструктора совпадает с именем класса. - Конструктор не возвращает значение, даже типа void. - Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации. - Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, автоматически вызывается конструктор базового класса без параметров (конструктор по умолчанию), который полям значимых типов присваивает нуль, полям ссылочных типов — значение null.

Слайд 63





Пример 12
namespace ConsoleApplication1{
  class Demo {
    public Demo( int a, double y ) {   
       // конструктор с параметрами
       this.a = a;
       this.y = y;
     }
     public double Gety(){ // метод получения поля 
         return y;
     } 
     int a;
     double y;
  }
Описание слайда:
Пример 12 namespace ConsoleApplication1{ class Demo { public Demo( int a, double y ) { // конструктор с параметрами this.a = a; this.y = y; } public double Gety(){ // метод получения поля return y; } int a; double y; }

Слайд 64





Пример 12
   class Class1{
      static void Main() {
        // вызов конструктора
         Demo a = new Demo( 300, 0.002 );           
         Console.WriteLine( a.Gety() ); // результат: 0,002
        // вызов конструктора 
         Demo b = new Demo( 1, 5.71 );                                     
         Console.WriteLine( b.Gety() ); // результат: 5,71
      }  
   }
}
Описание слайда:
Пример 12 class Class1{ static void Main() { // вызов конструктора Demo a = new Demo( 300, 0.002 ); Console.WriteLine( a.Gety() ); // результат: 0,002 // вызов конструктора Demo b = new Demo( 1, 5.71 ); Console.WriteLine( b.Gety() ); // результат: 5,71 } } }

Слайд 65





Пример 13
class Demo {
    public Demo( int a ) {  // конструктор 1 
        this.a = a;
    }
    public Demo( int a, double y ) : this( a )  { 
                     // вызов конструктора 1
          this.y = y;
    }
     ... 
}
Описание слайда:
Пример 13 class Demo { public Demo( int a ) { // конструктор 1 this.a = a; } public Demo( int a, double y ) : this( a ) { // вызов конструктора 1 this.y = y; } ... }

Слайд 66





Конструкторы
В C# существует возможность описывать статический класс, то есть класс с модификатором static. Экземпляры такого класса создавать запрещено, и кроме того, от него запрещено наследовать. Все элементы такого класса должны явным образом объявляться с модификатором static (константы и вложенные типы классифицируются как статические элементы автоматически).
Описание слайда:
Конструкторы В C# существует возможность описывать статический класс, то есть класс с модификатором static. Экземпляры такого класса создавать запрещено, и кроме того, от него запрещено наследовать. Все элементы такого класса должны явным образом объявляться с модификатором static (константы и вложенные типы классифицируются как статические элементы автоматически).

Слайд 67





Пример 14
namespace ConsoleApplication1{
   static class D{
      static int a = 200;
      static double b = 0.002;
      public static void Print (){
         Console.WriteLine( "a = " + a );
         Console.WriteLine( "b = " + b );
     }
  }
Описание слайда:
Пример 14 namespace ConsoleApplication1{ static class D{ static int a = 200; static double b = 0.002; public static void Print (){ Console.WriteLine( "a = " + a ); Console.WriteLine( "b = " + b ); } }

Слайд 68





Пример 14
    class Class1{
        static void Main(){
             D.Print();
        }
    }
}
Описание слайда:
Пример 14 class Class1{ static void Main(){ D.Print(); } } }

Слайд 69





Деструкторы
Система "сборки мусора" в С# освобождает память от лишних объектов автоматически, действуя незаметно и без всякого вмешательства со стороны программиста. "Сборка мусора" происходит лишь время от времени по ходу выполнения программы, нельзя заранее знать или предположить, когда именно произойдет "сборка мусора". 
В языке С# имеется возможность определить метод, который будет вызываться непосредственно перед окончательным уничтожением объекта системой "сборки мусора". Такой метод называется деструктором .
Описание слайда:
Деструкторы Система "сборки мусора" в С# освобождает память от лишних объектов автоматически, действуя незаметно и без всякого вмешательства со стороны программиста. "Сборка мусора" происходит лишь время от времени по ходу выполнения программы, нельзя заранее знать или предположить, когда именно произойдет "сборка мусора". В языке С# имеется возможность определить метод, который будет вызываться непосредственно перед окончательным уничтожением объекта системой "сборки мусора". Такой метод называется деструктором .

Слайд 70





Деструкторы
Общая форма деструктора: 
~имя_класса() { 
     // код деструктора 
} 
В деструкторе можно указать те действия, которые следует выполнить перед тем, как уничтожать объект. Деструктор вызывается непосредственно перед "сборкой мусора".
Описание слайда:
Деструкторы Общая форма деструктора: ~имя_класса() { // код деструктора } В деструкторе можно указать те действия, которые следует выполнить перед тем, как уничтожать объект. Деструктор вызывается непосредственно перед "сборкой мусора".

Слайд 71





Пример 15
class Destruct { 
      public int x; 
      public Destruct(int i) { 
             // Вызывается при утилизации объекта. 
          ~Destruct () { 
             // Console.WriteLine("Уничтожить " + х); 
          } 
          // Создает объект и тут же уничтожает его. 
       public void Generator(int i) { 
          Destruct о = new Destruct (i); 
     } 
}
Описание слайда:
Пример 15 class Destruct { public int x; public Destruct(int i) { // Вызывается при утилизации объекта. ~Destruct () { // Console.WriteLine("Уничтожить " + х); } // Создает объект и тут же уничтожает его. public void Generator(int i) { Destruct о = new Destruct (i); } }

Слайд 72





Пример 15
class DestructDemo { 
      static void Main() { 
         int count; 
         Destruct ob = new Destruct (10); 
   /* Можно создать большое число объектов, чтобы в какой-то момент произошла "сборка мусора" */ 
        for (count=l; count < 100000; count++) 
            ob.Generator(count); 
          Console.WriteLine("Готово!"); 
      } 
}
Описание слайда:
Пример 15 class DestructDemo { static void Main() { int count; Destruct ob = new Destruct (10); /* Можно создать большое число объектов, чтобы в какой-то момент произошла "сборка мусора" */ for (count=l; count < 100000; count++) ob.Generator(count); Console.WriteLine("Готово!"); } }

Слайд 73





Виртуальные, переопределяющие и абстрактные методы
Если объявление метода экземпляра содержит модификатор virtual, метод является виртуальным методом. 
Виртуальный метод может быть переопределен в производном классе. Если объявление метода экземпляра содержит модификатор override, метод переопределяет унаследованный виртуальный метод с такой же сигнатурой. Объявление виртуального метода определяет новый метод. Объявление переопределяющего метода уточняет существующий виртуальный метод, предоставляя его новую реализацию.
Описание слайда:
Виртуальные, переопределяющие и абстрактные методы Если объявление метода экземпляра содержит модификатор virtual, метод является виртуальным методом. Виртуальный метод может быть переопределен в производном классе. Если объявление метода экземпляра содержит модификатор override, метод переопределяет унаследованный виртуальный метод с такой же сигнатурой. Объявление виртуального метода определяет новый метод. Объявление переопределяющего метода уточняет существующий виртуальный метод, предоставляя его новую реализацию.

Слайд 74





Виртуальные, переопределяющие и абстрактные методы
Вместе с ключевым словом override может также использоваться и ключевое слово sealed (герметизированный), указывающее, что в данный метод больше не могут вноситься изменения ни в каких производных классах, т.е. метод не может переопределяться в производных классах. 
public class MyDerivedClass : MyBaseClass { 
        public override sealed void DoSomething () { 
          // Реализация в производном классе, 
          // переопределяющая базовую реализацию. 
        } 
}
Описание слайда:
Виртуальные, переопределяющие и абстрактные методы Вместе с ключевым словом override может также использоваться и ключевое слово sealed (герметизированный), указывающее, что в данный метод больше не могут вноситься изменения ни в каких производных классах, т.е. метод не может переопределяться в производных классах. public class MyDerivedClass : MyBaseClass { public override sealed void DoSomething () { // Реализация в производном классе, // переопределяющая базовую реализацию. } }

Слайд 75





Виртуальные, переопределяющие и абстрактные методы
Абстрактным называется виртуальный метод без реализации. 
Объявление абстрактного метода осуществляется с использованием модификатора abstract и допускается только в классе, объявленном как abstract. 
В каждом неабстрактном производном классе необходимо переопределять абстрактный метод.
Описание слайда:
Виртуальные, переопределяющие и абстрактные методы Абстрактным называется виртуальный метод без реализации. Объявление абстрактного метода осуществляется с использованием модификатора abstract и допускается только в классе, объявленном как abstract. В каждом неабстрактном производном классе необходимо переопределять абстрактный метод.

Слайд 76





Пример 16
public abstract class Expression{
public abstract double Evaluate(Hashtable vars);
}
public class Constant: Expression{
double value;
	public Constant(double value) {
	this.value = value;
}
  public override double Evaluate(Hashtable vars){
	return value;
}
}
Описание слайда:
Пример 16 public abstract class Expression{ public abstract double Evaluate(Hashtable vars); } public class Constant: Expression{ double value; public Constant(double value) { this.value = value; } public override double Evaluate(Hashtable vars){ return value; } }

Слайд 77





Пример 16
public class VariableReference: Expression{
string name;
	public VariableReference(string name) {
	this.name = name;
}
	public override double Evaluate(Hashtable vars){
	object value = vars[name];
	if (value == null)  throw new Exception("Не определена переменная: " + name);
	return Convert.ToDouble(value);
}
}
Описание слайда:
Пример 16 public class VariableReference: Expression{ string name; public VariableReference(string name) { this.name = name; } public override double Evaluate(Hashtable vars){ object value = vars[name]; if (value == null) throw new Exception("Не определена переменная: " + name); return Convert.ToDouble(value); } }

Слайд 78





Пример 16
public class Operation: Expression{
	Expression left;
	char op;
	Expression right;
	public Operation(Expression left, char op, Expression right) {
	this.left = left;
	this.op = op;
	this.right = right;
}
Описание слайда:
Пример 16 public class Operation: Expression{ Expression left; char op; Expression right; public Operation(Expression left, char op, Expression right) { this.left = left; this.op = op; this.right = right; }

Слайд 79





Пример 16
	public override double Evaluate(Hashtable vars){
	double x = left.Evaluate(vars);
	double y = right.Evaluate(vars);
	switch (op) {
		case '+': return x + y;
		case '-': return x - y;
		case '*': return x * y;
		case '/': return x / y;
	}
	throw new Exception("Не определен оператор");
}
}
Описание слайда:
Пример 16 public override double Evaluate(Hashtable vars){ double x = left.Evaluate(vars); double y = right.Evaluate(vars); switch (op) { case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; } throw new Exception("Не определен оператор"); } }

Слайд 80





Пример 16
	Четыре приведенных выше класса могут использоваться для моделирования арифметических выражений. Например, с помощью экземпляров этих классов выражение x + 3 можно представить следующим образом.
Expression e = new Operation(new VariableReference("x"), '+', new Constant(3));
Описание слайда:
Пример 16 Четыре приведенных выше класса могут использоваться для моделирования арифметических выражений. Например, с помощью экземпляров этих классов выражение x + 3 можно представить следующим образом. Expression e = new Operation(new VariableReference("x"), '+', new Constant(3));

Слайд 81





Пример 16
class Test{ //классы Expression используются для вычисления
//  выражения x * (y + 2) с различными значениями x и y 
static void Main() {
	  Expression e = new Operation(
	new VariableReference("x"),
	'*',
	new Operation(
		new VariableReference("y"),
		'+',
		new Constant(2)
	)
);
Описание слайда:
Пример 16 class Test{ //классы Expression используются для вычисления // выражения x * (y + 2) с различными значениями x и y static void Main() { Expression e = new Operation( new VariableReference("x"), '*', new Operation( new VariableReference("y"), '+', new Constant(2) ) );

Слайд 82





Пример 16
	Hashtable vars = new Hashtable();
	vars["x"] = 3;
vars["y"] = 5;
Console.WriteLine(e.Evaluate(vars)); // Вывод "21"
	vars["x"] = 1.5;
vars["y"] = 9;
Console.WriteLine(e.Evaluate(vars)); //Вывод "16.5" 
}
}
Описание слайда:
Пример 16 Hashtable vars = new Hashtable(); vars["x"] = 3; vars["y"] = 5; Console.WriteLine(e.Evaluate(vars)); // Вывод "21" vars["x"] = 1.5; vars["y"] = 9; Console.WriteLine(e.Evaluate(vars)); //Вывод "16.5" } }

Слайд 83





Контрольные вопросы
1. Перечислите и опишите элементы класса в C#.
2. Опишите способы передачи параметров в методы.
3. Для чего в классе может потребоваться несколько конструкторов?
4. Как можно вызвать один конструктор из другого? Зачем это нужно?
5. Что такое this? Что в нем хранится, как он используется?
Описание слайда:
Контрольные вопросы 1. Перечислите и опишите элементы класса в C#. 2. Опишите способы передачи параметров в методы. 3. Для чего в классе может потребоваться несколько конструкторов? 4. Как можно вызвать один конструктор из другого? Зачем это нужно? 5. Что такое this? Что в нем хранится, как он используется?

Слайд 84





Контрольные вопросы
6. Что такое деструктор? Гарантирует ли среда его выполнение?
7. Какие действия обычно выполняются в части set свойства?
8. Может ли свойство класса быть не связанным с его полями?
9. Можно ли описать разные спецификаторы доступа к частям get и set свойства?
Описание слайда:
Контрольные вопросы 6. Что такое деструктор? Гарантирует ли среда его выполнение? 7. Какие действия обычно выполняются в части set свойства? 8. Может ли свойство класса быть не связанным с его полями? 9. Можно ли описать разные спецификаторы доступа к частям get и set свойства?



Похожие презентации
Mypresentation.ru
Загрузить презентацию