double arrow

Статические и экземплярные переменные

Статические переменные – это переменные класса, объявленные с указанием служебного слова static. Значения этих переменных одинаковы для всех экземпляров класса. Поэтому обращение к ним производится по имени класса, а не по имени экземпляра. Экземплярные переменные для каждого экземпляра могут хранить свое значение.

Модификатор static декларирует принадлежность члена класса всему классу (всем экземплярам класса), а не конкретному его экземпляру. Доступ к таким членам осуществляется только через имя класса, а не его экземпляра.

Поля, описанные со спецификатором static, а также константы существуют в един­ственном экземпляре для всех объектов класса, поэтому к ним обращаются не через имя экземпляра, а через имя класса. Обращение к полю класса выполняется с помощью операции доступа (точка). Справа от точки задается имя поля, слева — имя экземпляра для обычных полей или имя класса для статических. Рассмотрим пример создания класса Demo и два способа обращения к его полям.

class Circle

{

public int x=0;

public int y=0;

public int radius=3;

public const double pi = 3.14;

public static string name = "Окружность";

double p;

double s;

}

class Program

{

static void Main()

{

Circle cr = new Circle(); //создание экземпляра класса

Console.WriteLine("pi=" + Circle.pi);// обращение к константе

Console.Write(Circle.name);// обращение к статическому полю

//обращение к обычным полям

Console.WriteLine(" с центром в точке ({0},{1}) и радиусом {2}", cr.x, cr.y, cr.radius);

// Console.WriteLine(cr.p); - вызовет ошибку, т.к. поле p, c имеют тип private

Console.Write("Введите коэффициент= ");

int kof = int.Parse(Console.ReadLine());

cr.x -= kof; cr.y += kof; cr.radius *= kof;

Console.WriteLine(" Новая окружность с центром в точке ({0},{1}) и радиусом {2}",

cr.x, cr.y, cr.radius);

//cr.s = 2 * Circle.pi * cr.radius; - вызовет ошибку, т.к. поле s, c имеют тип private

}

}

Методы (функции-члены класса)

Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс. Другими словами, методы определяют поведение класса. Например, стандартный класс System.Math содержит методы, которые позволяют вычислять значения математический функций.

Таким образом, методы представляют собой действия (функции), которые можно произвести с объектами данного класса. Например:

public class My

{

private int a, b;

public My( int x, int y ){ a = x; b = y; }

//public My( int a, int b ){ this.a = a; this.b = b; }

public int Max(){ return a > b ? a : b; }

}

public class Application

{

public static void Main()

{

My helper = new My(2, 10);

Console.WriteLine("MAX(2, 10) = {0}", helper.Max());

}

}

Возможные модификаторы методов – это уже рассмотренные модификаторы доступа такие, как public, static, protected, abstract.

Модификатор static имеет тот же смысл, что и у полей. Он указывает, что метод принадлежит классу, а не конкретному экземпляру. Поэтому работать такой метод может только со статическими членами:

public class SampleClass

{

public static int a;

public int b;

public static void DoubleA(){ a *= 2; }

public void SetB(){ b = a; }

}

public class Application

{

public static void Main()

{

SampleClass sc1 = new SampleClass(), sc2 = new SampleClass();

SampleClass.a = 1;

sc1.SetB();

SampleClass.a = 2;

sc2.SetB();

Console.WriteLine("sc1.b = {0}, sc2.b = {1}", sc1.b, sc2.b);

}

}

Методам также можно передавать параметры, которые определяют его действия.

Формат списка параметров такой:
<модификатор параметра> < тип параметра> < имя параметра>

Единственной необычной частью является модификатор параметра. Существуют следующие модификаторы параметров:

· out - указывает, что значение параметра не передается в метод, а возвращается из него. Реально это означает, что можно передавать только переменную, она может быть не инициализирована и ее значение может быть изменено в методе.

· ref - указывает, что параметр передается по ссылке. То есть, если в теле метода будет изменено его значение, изменится и значение передаваемой переменной. С модификатором ref передаваться могут только переменные.

Также существует возможность декларировать метод как принимающий произвольное число аргументов. Для этого используется следующий синтаксис:

<param> <тип элемента[]><имя списка>

Для пояснения рассмотрим следующий пример:

class Application

{

static void SampleMethod( string text, params string[] args )

{

Console.WriteLine(text);

foreach (string s in args){ Console.WriteLine(s); }

}

public static void Main()

{

SampleMethod("Parameters list:", "Param1", "Param2", "Param3");

}

}


Сейчас читают про: