Модификаторы ref, out, params параметров методов

Мод-тор ref пишут и перед параметром в методе, и перед аргументом в вызове метода. Аргументу, передаваемому методу со словом ref, должно быть присвоено значение до вызова метода. Ведь параметр должен ссылаться на действит. значение. Ref обычно прим. для того, чтобы метод внес изменения в сущ-щие. Параметры out работают точно так же, как и параметры ref, но в них разрешается передавать не инициализируемые переменные. Но чаще всего, модификатор out исп-ся не для передачи значения методу, а для его получения из метода. Не нужно тогда переменной (аргументу со словом out) присваивать начальное значение до вызова метода. Примечание:Метод обязательно должен присвоить out-параметру значение. Модификаторы ref и out можно применять и к ссылочным параметрам, т.е параметрам-объектам. В этом случае реал-ся передача ссылки по ссылке. Это позволяет методу изменять объект, на кот. указывает ссылка-параметр. Использование переменного количества аргументов и модификатор params.Иногда нужен метод, который принимал бы произвольное число аргументов. Например, метод, который находит максимальное значение в наборе чисел. Методу может быть передано 2, 3, 4 и т.д. значения. Такому методу нужен специальный параметр, который заменяет собой произвольное количество параметров. Это реализуется с помощью модификатора params. Модификатор params используется для объявления параметра массива, который сможет получить некоторое количество аргументов (в том числе и нулевое). В любом методе может быть только один модификатор params. Параметр с модификатором params может быть только последним параметром в списке параметров метода.


 

18. Общие (статические) члены класса. Доступ к общим членам.
Ограничения на static-методы.

Методы можно объявлять как статические с использованием ключевого слова static. Это нужно, когда требуется определить член класса, который будет использоваться независимо от объекта этого класса. Обычно к члену класса доступ предоставляется через объект этого класса. Однако можно создать член, который заведомо разрешено использовать сам по себе, т.е. без ссылки на конкретный экземпляр. С использованием ключевого слова static можно объявлять как методы, так и переменные (поля). Пример static- члена – это метод Main ( ), который должен быть вызван операционной системой в начале работы программы (без создания экземпляра). При использовании static – члена вне класса нужно указать Имя_класса.имя_ static- члена. Объект при этом не нужно создавать. В отличие от обычных данных статические данные совместно используются всеми объектами того класса, в котором они были определены. Вместо локальных копий переменной в каждом из объектов существует единственная копия статической переменной, которой пользуются все объекты. Инициализация static- переменной происходит при загрузке класса. Если инициализатор явно не указан, static- переменная, предназначенная для хранения числовых значений; объектные ссылки – null- значениями, а переменные типа bool- значениями false. Таким образом, static- переменная всегда имеет значение. Переменные, объявленные как static- члены, являются по сути глобальными переменными. Различие между static и обычным методом состоит в том, что static – метод можно вызвать посредством имени класса, без необходимости создания объекта этого класса. Так вызывается метод Sqrt класса Math. Это- статический метод. В C# доступ к статическим членам класса посредством экземпляров класса не поддерживается. Ограничения на static-методы. На static-методы накладывается ряд ограничений: 1.static-метод не имеет ссылки this. 2.static-метод может напрямую вызывать только другие static-методы: он не может вызывать метод экземпляра своего класса. Дело в том, что методы экземпляров работают с конкретными экземплярами класса, чего не скажешь о static-методах. 3.static-метод имеет прямой доступ только к static-данным. Он не может напрямую использовать переменные экземпляров, так же как не работает с экземплярами класса. Примечание:static-метод может вызывать методы экземпляров и получать доступ к переменным экземпляров своего класса через объект класса (т.е в Main() ) или внутри метода, у которого параметр-объект этого же класса. Поскольку static-поля не зависят от конкретного объекта, они используются при обработке информации, применяемой ко всему классу. Статические члены класса (особенно статические конструкторы) применяют при создании атрибутов. Атрибуты используются для описания создаваемых типов ( например классов). Т.е атрибуты предоставляют описательную информацию, которая может быть присоединена к различным элементам программного кода ( к классам, методам и т.д.). Эту информацию можно получить на этапе выполнения программы.