Для того чтобы узнать какие поля свойства и методы есть у класса можно

Для того чтобы узнать какие поля свойства и методы есть у класса можно thumbnail

Общая структура типа C# представляет собой описание типа и определение полей и методов. Поля – хранят данные, методы ими манипулируют (изменяют значения). 

Свойства созданы как комбинация метода и поля в одном члене типа для лаконичности и безопасности кода.

Лаконичность достигается тем, что для считывания или изменения значения поля в свойствах используются два метода. Безопасность – ограничением доступа к полям типа только свойствами. Для программиста типа, свойство выглядит методом, поскольку его нужно определять и реализовывать. Для программиста использующего объект типа – полем, поскольку обращение к полю и свойству идентичны. Инкапсуляция.

Для доступа к значению поля в свойстве используются методы, которые создаются средой выполнения, но реализуются программистом. Их два – get и set. Get используется в случае чтения значения поля и называется акссесором, set – при изменении значения, называется мутатором. Общее название для мутатора и аксессора – методы доступа.

Объявление свойства

Методы определяются внутри блока типа. Сигнатура в последовательности при объявлении:

  1. уровень доступа;

  2. тип свойства;

  3. имя свойства.

После сигнатуры определения следует два блока кода с реализацией аксессора и/или мутатора:

public class GrandMa
{
private int fullAge = 69; / закрытое поле для хранения возраста. Доступ к полю возможен только из свойства и методов класса.

public int FullAge
{
get
{
return fullAge;
}
set
{
if (value > 0)
{
fullAge = value;
}
}
}
}

Допустимо реализовывать свойство только с одним из методов. Свойство, содержащее только аксессор называется полем только для чтения, свойство с одним мутатором – свойством только для записи.

Аксессор get

Если в свойстве использован акссессор, то подобно методу, свойство должно возвращать значение поля, которое акссессор считывает. Тип поля должен соответствовать типу возвращаемого значения свойства.

Блок кода аксессора похож на реализацию метода и выполняется по всем правилам синтаксиса С#. Пример объявления свойства только с аксессором:

class Elephant
{
private string elName; // Закрытое поле. Считывание значения возможно только методами и свойствами класса.
public string ElName // открытое свойство для считывания значения поля elName. Возвращает значение типа string.
{
// реализация аксессора
get
{
return elName; // возврат значения поля elName
}
}
}

Использование аксессора в пользовательском в коде эквивалентно считыванию на прямую из поля:

Elephant el1 = new Elephant();// создание объекта типа Elephant
System.Console.WriteLine(el1.ElName); // вывод значения поля elName на системную консоль

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

class Elephant
{
private string elName; // Закрытое поле. Считывание значения возможно только методами и свойствами класса.
public string ElName // открытое свойство для считывания значения поля elName. Возвращает значение типа string.
{
// реализация аксессора
get
{
return elName + “ Сидорович”; // возврат значения поля elName с изменением. Изменения будут происходить при каждом использовании свойства внутри объекта. Плохой стиль, для изменения значения лучше использовать мутатор.
}
}
}

Мутатор set

Мутатор, или метод set по спецификации вызова поход на метод с возвращаемым значение типа void и одним параметром. public void SetValue (object value). Среда выполнения сама его вызывает в точке указанной программистом с прописанной им реализацией.

При реализации мутатора в блоке кода свойства нужно помнить о неявном участии параметра value, который выполняет функцию буфера, промежуточной переменной, значение которой нужно предать полю типа.

Пример реализации:

class Elephant
{
private string elName; // Закрытое поле. Считывание значения возможно только методами и свойствами класса.
public string ElName // открытое свойство для считывания значения поля elName. Возвращает значение типа string.
{
get
{
return elName;
}
// Реализация мутатора
set
{
elName = value; // полю elName присваивается значение неявного параметра value.
}
}
}

В блоке кода мутатора нельзя вводить локальную переменную value, поскольку уже есть такая переменная, неявно переданная в виде параметра. Такой код компилятор не пропустит и выдаст ошибку:

class Elephant
{
private string elName; // Закрытое поле. Считывание значения возможно только методами и свойствами класса.
public string ElName // открытое свойство для считывания значения поля elName. Возвращает значение типа string.
{
// Реализация мутатора
set
{
String value = “Фыва”; // нельзя, параметр value уже определен.
elName = value; // полю elName присваивается значение неявного параметра value.
}
}
}

Читайте также:  Какие химические свойства характерны для алкинов

Метод доступа set используется неявно при присвоении значения свойству, как в следующем примере:

Elephant el1 = new Elephant();// создание объекта типа Elephant
El1.ElName = “Никки”; // присваиваем значение полю elName через свойство ElName неявно вызывается мутатор.
System.Console.WriteLine(el1.ElName); // вывод значения поля elName на системную консоль

Модификаторы свойств и уровни доступа

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

Свойство может быть статичным (static), и будет доступным без необходимости создавать экземпляр типа, в котором оно определено.

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

Свойство можно сделать абстрактным при помощи ключевого слова abstract, оставив блок реализации пустым, в дальнейшем реализовав свойство в дочерних (производных) классах.

Применительно к определению свойств запрещено одновременное употребление следующих пар модификаторов:

  • static – virtual;

  • static – abstract;

  • static – override.

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

Пример:

private string description = “Какое-то описание”;
// создаем свойство для чтения/записи значения в поле description с разными модификаторами доступа для аксессора и мутатора
public string Description
{
// открытый аксессор
get
{
return description;
}
// защищенный мутатор
protected set
{
description = value;
}
}

Если для одного из методов доступа не указан модификатор доступа, то компилятор вставит его неявно руководствуясь модификатором доступа свойства.

Автоматически реализуемые свойства

Программист при реализации свойства связывает его с полем. Часто поля и свойства имеют одинаковые имена, чтобы программист, взглянув, мог сразу догадаться, для работы с каким полем создано свойство.

При работе с типами, в которых реализованы свойства, поля вовсе не вызываются, поскольку любой доступ к ним организован через свойства. Зачем в таком случае создавать поля вручную? И если код свойств не требует изысков программирования, то не проще ли доверить их создание компилятору.

Автоматически реализуемые свойства – это свойства, которые автоматически реализует компилятор, он же создает и поле, для доступа к которому создается свойство.

Сигнатура определения автоматически реализуемого свойства: 

тип имя { get; set; }

Сам блок инструкций в таком свойстве отсутствует и для мутатора и для аксессора. После ключевых слов get и set ставится символ завершения инструкции «;».

Автоматически реализуемые свойства доступны в версии C# 3.0 и новее. С 6 версии спецификации языка доступна возможность объявить и инициализировать скрытое поле через упрощенный синтаксис свойства, вот так: 

public string Nickname { get; set; } = “Забияка”;

Источник

Главная / Программирование /
C# для школьников / Тест 2

Упражнение 1:

Номер 1

Как можно создать программу на C#?

Ответ:

&nbsp(1) написать код программы в простом текстовом редакторе и скомпилировать его с помощью компилятора C#&nbsp

&nbsp(2) создать программу с помощью Microsoft Visual C# 2008 Express Edition, предварительно установив пакет Microsoft .NET Framework 3.5&nbsp

&nbsp(3) создать программу с помощью Visual C# 2008 Express, не устанавливая пакет Microsoft .NET Framework 3.5&nbsp

Номер 2

Укажите те виды проектов, которые можно создать в Visual C# Express

Ответ:

&nbsp(1) Windows Application (приложение для Windows)&nbsp

&nbsp(2) Instrument Library (библиотека инструментов)&nbsp

&nbsp(3) Console Application (консольное приложение)&nbsp

&nbsp(4) Class Library (библиотека классов)&nbsp

Для того чтобы узнать какие поля свойства и методы есть у класса можно

Номер 3

Каким образом после запуска Visual C# Express можно создать новый проект?

Ответ:

&nbsp(1) после запуска программы проект создается автоматически, ничего делать не нужно&nbsp

&nbsp(2) воспользоваться пунктом New project (Новый проект) меню File (Файл) и выбрать тип проекта&nbsp

&nbsp(3) после запуска программы автоматически откроется диалоговое окно, в котором нужно выбрать тип проекта&nbsp

&nbsp(4) нажать кнопку Create Project (Создать проект) на панели инструментов Visual C# Express и выбрать тип проекта&nbsp

Читайте также:  Какие полезные свойства чернослива

Упражнение 3:

Номер 1

Какая из приведенных ниже строк кода вызовет ошибки ” Требуется ; ” и ” Недопустимый элемент ” : ” в выражении ” ?

Ответ:

&nbsp(1) name : string;&nbsp

&nbsp(2) string name := “Иванов”;&nbsp

&nbsp(3) string name = “:Иванов”;&nbsp

Номер 2

Какой из приведенных ниже фрагментов кода вызовет ошибку ” В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта ” ?

Ответ:

&nbsp(1) Console.ReadLine();&nbsp

&nbsp(2) string surname; Console.ReadLine(surname);&nbsp

&nbsp(3) Console.ReadLine;&nbsp

&nbsp(4) Console.WriteLine();&nbsp

Номер 3

Какой вариант кода вызовет ошибку?

Ответ:

&nbsp(1) Console.ReadLine();&nbsp

&nbsp(2) Console.WriteLine;&nbsp

&nbsp(3) string name;&nbsp

&nbsp(4) Console.WriteLine();&nbsp

Упражнение 4:

Номер 1

Что выведет на экран программа

using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Иванов “,”Иван”);
Console.ReadLine();
}
}
}

Ответ:

&nbsp(1) Иванов Иван&nbsp

&nbsp(2) Иванов&nbsp

&nbsp(3) Иван Иванов&nbsp

&nbsp(4) Иван&nbsp

&nbsp(5) ничего, т.к. возникнет ошибка компиляции&nbsp

Номер 2

Что выведет на экран программа

using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Иванов “+”Иван”);
Console.ReadLine();
}
}
}

Ответ:

&nbsp(1) Иванов Иван&nbsp

&nbsp(2) Иванов&nbsp

&nbsp(3) ничего, т.к. возникнет ошибка компиляции&nbsp

Номер 3

Что выведет на экран программа

using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
string name = Иванов + Иван;
Console.WriteLine(name);
Console.ReadLine();
}
}
}

Ответ:

&nbsp(1) Иванов Иван&nbsp

&nbsp(2) Иванов&nbsp

&nbsp(3) ничего, т.к. возникнет ошибка компиляции&nbsp

Упражнение 5:

Номер 1

Укажите примеры классов

Ответ:

&nbsp(1) кот&nbsp

&nbsp(2) кот Пушок&nbsp

&nbsp(3) книга “Война и мир” &nbsp

&nbsp(4) растения&nbsp

Номер 2

Укажите примеры объектов

Ответ:

&nbsp(1) животные&nbsp

&nbsp(2) шкаф, стоящий в моей комнате&nbsp

&nbsp(3) Пушкин А.С.&nbsp

&nbsp(4) шкаф&nbsp

Номер 3

Укажите примеры классов

Ответ:

&nbsp(1) дом&nbsp

&nbsp(2) дом, который построил Джек&nbsp

&nbsp(3) автомобиль&nbsp

&nbsp(4) паспорт номер 123456 серии 7890&nbsp

Упражнение 6:

Номер 1

Укажите события класса School (школа)

Ответ:

&nbsp(1) номер школы&nbsp

&nbsp(2) пожарная тревога в школе&nbsp

&nbsp(3) полное название школы&nbsp

&nbsp(4) учить учеников&nbsp

&nbsp(5) директор школы&nbsp

&nbsp(6) выпускной&nbsp

&nbsp(7) организовать конкурс&nbsp

Номер 2

Укажите поля и свойства класса School (школа)

Ответ:

&nbsp(1) номер школы&nbsp

&nbsp(2) организовать конкурс&nbsp

&nbsp(3) полное название школы&nbsp

&nbsp(4) учить учеников&nbsp

&nbsp(5) директор школы&nbsp

Номер 3

Укажите методы (действия) класса School (школа)

Ответ:

&nbsp(1) номер школы&nbsp

&nbsp(2) пожарная тревога в школе&nbsp

&nbsp(3) полное название школы&nbsp

&nbsp(4) учить учеников&nbsp

&nbsp(5) директор школы&nbsp

&nbsp(6) выпускной&nbsp

&nbsp(7) организовать конкурс&nbsp

Упражнение 7:

Номер 1

Отметьте верные утверждения

Ответ:

&nbsp(1) подход с использованием классов, объектов, свойств, событий и методов является объектно-ориентированным подходом&nbsp

&nbsp(2) все программы на языке C# представляют собой описание множества классов&nbsp

&nbsp(3) при описании класса после его имени ставится точка с запятой&nbsp

Номер 2

Отметьте верные утверждения

Ответ:

&nbsp(1) имя класса может содержать пробелы&nbsp

&nbsp(2) каждый класс имеет название&nbsp

&nbsp(3) для описания класса необходимо использовать специальное слово class&nbsp

&nbsp(4) все объекты одного класса имеют одинаковый набор методов&nbsp

Номер 3

Отметьте верные утверждения

Ответ:

&nbsp(1) язык C# является объектно-ориентированным языком&nbsp

&nbsp(2) описание класса расположено между фигурными скобками {…}&nbsp

&nbsp(3) слово class в описании класса может быть написано с заглавной буквы&nbsp

&nbsp(4) у двух разных объектов одного класса значения всех свойств всегда совпадают&nbsp

Упражнение 8:

Номер 1

Для того, чтобы описать класс, необходимо

Ответ:

&nbsp(1) использовать ключевое слово class&nbsp

&nbsp(2) дать классу имя&nbsp

&nbsp(3) создать экземпляр класса&nbsp

Номер 2

Для того, чтобы объявить объект класса School (школа) нужно написать код

Ответ:

&nbsp(1)

сlass School
{
}

&nbsp

&nbsp(2) School num33; &nbsp

Читайте также:  Какие основные характерные свойства живых организмов

&nbsp(3) num33 = new School();&nbsp

Упражнение 9:

Номер 1

Какие имена могут иметь поля класса School (школа):

Ответ:

&nbsp(1) director of school&nbsp

&nbsp(2) 9aClass&nbsp

&nbsp(3) schoolNumber&nbsp

&nbsp(4) SchoolNumber&nbsp

&nbsp(5) _number&nbsp

Номер 2

Для того, чтобы добавить в класс новое поле, необходимо:

Ответ:

&nbsp(1) указать тип поля&nbsp

&nbsp(2) указать имя поля&nbsp

&nbsp(3) указать значение поля&nbsp

Номер 3

Для того, чтобы полю объекта класса присвоить значение, необходимо:

Ответ:

&nbsp(1) использовать ” . ” для разделения имени объекта и имени поля&nbsp

&nbsp(2) использовать ” = ” для присваивания значения&nbsp

&nbsp(3) знать тип поля&nbsp

Упражнение 10:

Номер 1

Какого типа должно быть поле hasStadium (есть ли у школы стадион) класса School (школа)?

Ответ:

&nbsp(1) строкового типа&nbsp

&nbsp(2) числового типа&nbsp

&nbsp(3) логического типа&nbsp

Номер 2

Какого типа должно быть поле MathMark (оценка по математике) класса Pupil (Ученик)?

Ответ:

&nbsp(1) строкового типа&nbsp

&nbsp(2) числового типа&nbsp

&nbsp(3) логического типа&nbsp

Номер 3

Какого типа должно быть поле director (фамилия директора) класса School (школа)?

Ответ:

&nbsp(1) строкового типа&nbsp

&nbsp(2) числового типа&nbsp

&nbsp(3) логического типа&nbsp

Упражнение 11:

Номер 1

С каким модификатором доступа должно быть описано поле MySecret (мой секрет) класса Pupil (ученик), чтобы это поле было никому не доступно кроме самого ученика?

Ответ:

&nbsp(1) public&nbsp

&nbsp(2) private&nbsp

&nbsp(3) protected&nbsp

Номер 2

С каким модификатором доступа должно быть описано поле MyResume (мое резюме) класса Employee (сотрудник), чтобы это поле было доступно всем?

Ответ:

&nbsp(1) public&nbsp

&nbsp(2) private&nbsp

&nbsp(3) protected&nbsp

Номер 3

С каким модификатором доступа должно быть описано поле MyIllness (мои болезни) класса Man (человек), чтобы это поле было доступно только наследникам класса Man?

Ответ:

&nbsp(1) public&nbsp

&nbsp(2) private&nbsp

&nbsp(3) protected&nbsp

Упражнение 12:

Номер 1

Если при объявлении поля класса пропущен модификатор доступа, то компьютер сделает это поле

Ответ:

&nbsp(1) открытым (public)&nbsp

&nbsp(2) закрытым (private)&nbsp

&nbsp(3) защищенным (protected)&nbsp

Номер 2

Какое поле класса Pupil будет доступно экземпляру Ivanov в следующей программе?

class Pupil
{
public string name;
int income;
protected int age;
private string password;
}
class School
{
Pupil Ivanov = new Pupil ();
}

Ответ:

&nbsp(1) name&nbsp

&nbsp(2) income&nbsp

&nbsp(3) age&nbsp

&nbsp(4) password&nbsp

Номер 3

Есть класс School (школа), содержащий поля public string name (название школы), int income (доход школы), protected int plan (учебный план школы), private int marks (средняя успеваемость). Есть класс Colledge – наследник от School. Какие поля класса School будут доступны из класса Colledge?

Ответ:

&nbsp(1) name&nbsp

&nbsp(2) income&nbsp

&nbsp(3) plan&nbsp

&nbsp(4) marks&nbsp

Упражнение 13:

Номер 1

Какие из ниже перечисленных блоков кода ошибочны?

Ответ:

&nbsp(1)

class Firma
{
Firma Genius;
Genius=new Firma();
}

&nbsp

&nbsp(2)

class Firma
{
Firma=new Genius();
Firma Genius;
}

&nbsp

&nbsp(3)

class Firma
{
Firma=new Class(Genius);
}

&nbsp

Номер 2

О чем говорит команда Persons Man; компилятору С#?

Ответ:

&nbsp(1) компилятор С# данную команду воспримет как ошибку&nbsp

&nbsp(2) данная команда предупреждает компилятор С# о работе с объектом Man из класса Persons&nbsp

&nbsp(3) данная команда предупреждает компилятор С# о работе с объектом Persons из класса Men&nbsp

&nbsp(4) создание объекта&nbsp

&nbsp(5) объявление метода&nbsp

&nbsp(6) объявление объекта&nbsp

Упражнение 14:

Номер 2

О чем говорит команда Persons Man; компилятору С#?

Ответ:

&nbsp(1) компилятор С# данную команду воспримет как ошибку&nbsp

&nbsp(2) данная команда предупреждает компилятор С# о работе с объектом Man из класса Persons&nbsp

&nbsp(3) данная команда предупреждает компилятор С# о работе с объектом Persons из класса Man&nbsp

&nbsp(4) о создании объекта&nbsp

&nbsp(5) об объявлении метода&nbsp

&nbsp(6) об объявлении объекта&nbsp

Для того чтобы узнать какие поля свойства и методы есть у класса можно

Источник