Свойство: модификаторы доступа в аксессорах 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Свойство: модификаторы доступа в аксессорах



 

По умолчанию доступность методов свойств («аксессоров») set и get оказывается такой же, как и у индексатора и свойства, частью которых они являются. Так, если свойство объявляется как public, то по умолчанию его set и get также становятся открытыми (public). Тем не менее для set или get можно указать собственный модификатор доступа, например private. Но в любом случае доступность методов свойства, определяемая таким модификатором, должна быть более ограниченной, чем доступность, указываемая для его свойства или индексатора.

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

 

Вышесказанное иллюстрирует нижеследующее:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class UserInfo

{

int age;

 

public int Age

{

get

{

return age;

}

// Ввод закрыт вне класса

private set

{

age = value;

}

}

 

public int myAge()

{

// Внутри класса доступ открыт

Age = 26;

return Age;

}

}

 

class Program

{

static void Main(string[] args)

{

UserInfo ui = new UserInfo();

// Для чтения доступ открыт вне класса

Console.WriteLine(ui.Age);

Console.WriteLine(ui.myAge());

/*

* Так нельзя:

* ui.Age = 26;

* UserInfo ui1 = new UserInfo{ Age = 26 };

*/

Console.WriteLine("Для продолжения нажмите любую клавишу...");

Console.ReadKey();

}

}

}

/* Выведет:

* 0

* 26

* Для продолжения нажмите любую клавишу...

*/

 

Вероятно, ограничение доступа к аксессорам свойств оказывается наиболее важным для работы с автоматически реализуемыми свойствами. Создать автоматически реализуемое свойство только для чтения или же только для записи нельзя, поскольку оба get и set, должны быть указаны при объявлении такого свойства. Тем не менее, добиться желаемого результата все же можно, объявив один из аксессоров свойств автоматически реализуемого свойства как private.

 

На применение модификаторов доступа в аксессорах свойств накладываются следующие ограничения:

  • Действию модификатора доступа подлежит только один: set или get, но не оба сразу.
  • Модификатор должен обеспечивать более ограниченный доступ к аксессору свойства, чем доступ на уровне свойства или индексатора.
  • Модификатор доступа нельзя использовать при объявлении аксессора свойства в интерфейсе или же при реализации аксессора свойства, указываемого в интерфейсе.

Понятие «Массив», «Строка», «Кортеж» и «Перечисление»

Понятие «Массив»

Понятие «Массив»

 

Понятие «Массив»

 

Массив — это структура данных, содержащая несколько переменных одного типа. Массив объявляется следующим образом:

 

type[] arrayName;

 

В следующем примере показано создание одномерных, многомерных массивов и «массивов массивов»:

 

class Program

{

static void Main()

{

// Объявляем одномерный массив

int[] array1 = new int[5];

// Объявляем и заполняем

int[] array2 = new int[] { 1, 3, 5, 7, 9 };

// Альтернативный синтаксис

int[] array3 = { 1, 2, 3, 4, 5, 6 };

// Объявляем двумерный массив

int[,] multiDimensionalArray1 = new int[2, 3];

// Объявляем и заполняем

int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

// Объявляем массив массивов

int[][] jaggedArray = new int[6][];

// Заполняем параметры для первого массива в массиве массивов

jaggedArray[0] = new int[4] { 1, 2, 3, 4 };

}

}

 

Массив имеет следующие свойства:

  • Массив может быть одномерным, многомерным или массивом массивов.
  • Значение по умолчанию числовых элементов массива задано равным нулю, а элементы ссылок имеют значение NULL.
  • Не выровненный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null.
  • Индексация массивов начинается с нуля: массив с элементами n индексируется от 0 до n-1.
  • Элементы массива могут быть любых типов, включая тип массива.
  • Типы массива являются ссылочными типами, производными от абстрактного базового типа Array. Поскольку этот тип реализует IEnumerable и IEnumerable<T>, в C# во всех массивах можно использовать итерацию foreach.

 

Массивы как объекты

 

В C# массивы фактически являются объектами, а не только адресуемыми областями непрерывной памяти, как в C и C++. Array является абстрактным базовым типом всех типов массивов. Можно использовать свойства и другие члены класса, которые имеет Array. В примере используется свойство Length для получения длины массива. В следующем коде длина массива numbers, равная 5, присваивается переменной lengthOfNumbers:

 

int[] numbers = { 1, 2, 3, 4, 5 };

int lengthOfNumbers = numbers.Length;

 

Класс Array позволяет использовать много других полезных методов и свойств для выполнения сортировки, поиска и копирования массивов.

 

В этом примере свойство Rank используется для отображения числа измерений массива:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[,] theArray = new int[5, 10];

Console.WriteLine("Массив имеет {0} измерений", theArray.Rank);

Console.WriteLine("Для продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* 2

* Для продолжение нажмите любую клавишу...

*/

 

Использование оператора foreach

 

В C# также предусмотрен оператор foreach. Этот оператор обеспечивает простой и понятный способ выполнения итерации элементов в массиве. Например, следующий код создает массив numbers и осуществляет его итерацию с помощью оператора foreach:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };

foreach (int i in numbers)

{

Console.Write("{0} ", i);

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* 4 5 6 1 2 3 -2 -1 0

* Для продолжение нажмите любую клавишу...

*/

 

Этот же метод можно использовать для итерации элементов в многомерных массивах, например:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace LC_Console

{

class Program

{

static void Main()

{

int[,] numbers2D = new int[3, 2] { { 9, 99 }, { 3, 33 }, { 5, 55 } };

// Или

// int[,] numbers2D = { { 9, 99 }, { 3, 33 }, { 5, 55 } };

foreach (int i in numbers2D)

{

System.Console.Write("{0} ", i);

}

Console.WriteLine("\nДля продолжения нажмите любую клавишу...");;

Console.ReadKey();

}

}

}

/* Выведет:

* 9 99 3 33 5 55

* Для продолжение нажмите любую клавишу...

*/

 

Однако для лучшего контроля элементов в многомерных массивах можно использовать вложенный цикл for.

Виды массивов

Виды массивов

 

Одномерный массив

 

Можно объявить массив из пяти целых чисел с одним измерением, как показано в следующем примере:

 

int[] array = new int[5];

 

Массив содержит элементы с array[0] по array[4]. Оператор new служит для создания массива и инициализации элементов массива со значениями по умолчанию. В данном примере элементы массива инициализируются значением 0.

 

Массив, в котором хранятся строковые элементы, можно объявить таким же образом. Пример:

 

string[] stringArray = new string[6];

 

Массив можно инициализировать при объявлении. В этом случае спецификация ранга не нужна, поскольку она уже предоставлена по числу элементов в списке инициализации. Пример:

 

int[] array1 = new int[] { 1, 3, 5, 7, 9 };

 

Строковый массив можно инициализировать таким же образом. Ниже приведено объявление строкового массива, в котором каждый элемент инициализируется названием дня:

 

string[] weekDays = new string[] { "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Суб.", "Вск." };

 

При инициализации массива при объявлении можно использовать следующий синтаксис:

 

int[] array1 = { 1, 3, 5, 7, 9 };

string[] weekDays = { "Пн.", "Вт.", "Ср.", "Чт.", "Пт.", "Суб.", "Вск." };

 

Можно объявить переменную массива без инициализации, но при присвоении массива этой переменной нужно использовать оператор new. Пример:

 

int[] array3;

array3 = new int[] { 1, 3, 5, 7, 9 }; // OK

//array3 = {1, 3, 5, 7, 9}; // Так нельзя

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 320; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.190.144 (0.022 с.)