Для того чтобы узнать какие поля свойства и методы есть у класса можно
Общая структура типа C# представляет собой описание типа и определение полей и методов. Поля – хранят данные, методы ими манипулируют (изменяют значения).
Свойства созданы как комбинация метода и поля в одном члене типа для лаконичности и безопасности кода.
Лаконичность достигается тем, что для считывания или изменения значения поля в свойствах используются два метода. Безопасность – ограничением доступа к полям типа только свойствами. Для программиста типа, свойство выглядит методом, поскольку его нужно определять и реализовывать. Для программиста использующего объект типа – полем, поскольку обращение к полю и свойству идентичны. Инкапсуляция.
Для доступа к значению поля в свойстве используются методы, которые создаются средой выполнения, но реализуются программистом. Их два – get и set. Get используется в случае чтения значения поля и называется акссесором, set – при изменении значения, называется мутатором. Общее название для мутатора и аксессора – методы доступа.
Объявление свойства
Методы определяются внутри блока типа. Сигнатура в последовательности при объявлении:
уровень доступа;
тип свойства;
имя свойства.
После сигнатуры определения следует два блока кода с реализацией аксессора и/или мутатора:
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#?
Ответ:
 (1) написать код программы в простом текстовом редакторе и скомпилировать его с помощью компилятора C# 
 (2) создать программу с помощью Microsoft Visual C# 2008 Express Edition, предварительно установив пакет Microsoft .NET Framework 3.5 
 (3) создать программу с помощью Visual C# 2008 Express, не устанавливая пакет Microsoft .NET Framework 3.5 
Номер 2
Укажите те виды проектов, которые можно создать в Visual C# Express
Ответ:
 (1) Windows Application (приложение для Windows) 
 (2) Instrument Library (библиотека инструментов) 
 (3) Console Application (консольное приложение) 
 (4) Class Library (библиотека классов) 
Номер 3
Каким образом после запуска Visual C# Express можно создать новый проект?
Ответ:
 (1) после запуска программы проект создается автоматически, ничего делать не нужно 
 (2) воспользоваться пунктом New project (Новый проект) меню File (Файл) и выбрать тип проекта 
 (3) после запуска программы автоматически откроется диалоговое окно, в котором нужно выбрать тип проекта 
 (4) нажать кнопку Create Project (Создать проект) на панели инструментов Visual C# Express и выбрать тип проекта 
Упражнение 3:
Номер 1
Какая из приведенных ниже строк кода вызовет ошибки ” Требуется ; ” и ” Недопустимый элемент ” : ” в выражении ” ?
Ответ:
 (1) name : string; 
 (2) string name := “Иванов”; 
 (3) string name = “:Иванов”; 
Номер 2
Какой из приведенных ниже фрагментов кода вызовет ошибку ” В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта ” ?
Ответ:
 (1) Console.ReadLine(); 
 (2) string surname; Console.ReadLine(surname); 
 (3) Console.ReadLine; 
 (4) Console.WriteLine(); 
Номер 3
Какой вариант кода вызовет ошибку?
Ответ:
 (1) Console.ReadLine(); 
 (2) Console.WriteLine; 
 (3) string name; 
 (4) Console.WriteLine(); 
Упражнение 4:
Номер 1
Что выведет на экран программа
using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Иванов “,”Иван”);
Console.ReadLine();
}
}
}
Ответ:
 (1) Иванов Иван 
 (2) Иванов 
 (3) Иван Иванов 
 (4) Иван 
 (5) ничего, т.к. возникнет ошибка компиляции 
Номер 2
Что выведет на экран программа
using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“Иванов “+”Иван”);
Console.ReadLine();
}
}
}
Ответ:
 (1) Иванов Иван 
 (2) Иванов 
 (3) ничего, т.к. возникнет ошибка компиляции 
Номер 3
Что выведет на экран программа
using System;
namespace ivanov
{
class Program
{
static void Main(string[] args)
{
string name = Иванов + Иван;
Console.WriteLine(name);
Console.ReadLine();
}
}
}
Ответ:
 (1) Иванов Иван 
 (2) Иванов 
 (3) ничего, т.к. возникнет ошибка компиляции 
Упражнение 5:
Номер 1
Укажите примеры классов
Ответ:
 (1) кот 
 (2) кот Пушок 
 (3) книга “Война и мир”  
 (4) растения 
Номер 2
Укажите примеры объектов
Ответ:
 (1) животные 
 (2) шкаф, стоящий в моей комнате 
 (3) Пушкин А.С. 
 (4) шкаф 
Номер 3
Укажите примеры классов
Ответ:
 (1) дом 
 (2) дом, который построил Джек 
 (3) автомобиль 
 (4) паспорт номер 123456 серии 7890 
Упражнение 6:
Номер 1
Укажите события класса School (школа)
Ответ:
 (1) номер школы 
 (2) пожарная тревога в школе 
 (3) полное название школы 
 (4) учить учеников 
 (5) директор школы 
 (6) выпускной 
 (7) организовать конкурс 
Номер 2
Укажите поля и свойства класса School (школа)
Ответ:
 (1) номер школы 
 (2) организовать конкурс 
 (3) полное название школы 
 (4) учить учеников 
 (5) директор школы 
Номер 3
Укажите методы (действия) класса School (школа)
Ответ:
 (1) номер школы 
 (2) пожарная тревога в школе 
 (3) полное название школы 
 (4) учить учеников 
 (5) директор школы 
 (6) выпускной 
 (7) организовать конкурс 
Упражнение 7:
Номер 1
Отметьте верные утверждения
Ответ:
 (1) подход с использованием классов, объектов, свойств, событий и методов является объектно-ориентированным подходом 
 (2) все программы на языке C# представляют собой описание множества классов 
 (3) при описании класса после его имени ставится точка с запятой 
Номер 2
Отметьте верные утверждения
Ответ:
 (1) имя класса может содержать пробелы 
 (2) каждый класс имеет название 
 (3) для описания класса необходимо использовать специальное слово class 
 (4) все объекты одного класса имеют одинаковый набор методов 
Номер 3
Отметьте верные утверждения
Ответ:
 (1) язык C# является объектно-ориентированным языком 
 (2) описание класса расположено между фигурными скобками {…} 
 (3) слово class в описании класса может быть написано с заглавной буквы 
 (4) у двух разных объектов одного класса значения всех свойств всегда совпадают 
Упражнение 8:
Номер 1
Для того, чтобы описать класс, необходимо
Ответ:
 (1) использовать ключевое слово class 
 (2) дать классу имя 
 (3) создать экземпляр класса 
Номер 2
Для того, чтобы объявить объект класса School (школа) нужно написать код
Ответ:
 (1)
сlass School
{
}
 
 (2) School num33;  
 (3) num33 = new School(); 
Упражнение 9:
Номер 1
Какие имена могут иметь поля класса School (школа):
Ответ:
 (1) director of school 
 (2) 9aClass 
 (3) schoolNumber 
 (4) SchoolNumber 
 (5) _number 
Номер 2
Для того, чтобы добавить в класс новое поле, необходимо:
Ответ:
 (1) указать тип поля 
 (2) указать имя поля 
 (3) указать значение поля 
Номер 3
Для того, чтобы полю объекта класса присвоить значение, необходимо:
Ответ:
 (1) использовать ” . ” для разделения имени объекта и имени поля 
 (2) использовать ” = ” для присваивания значения 
 (3) знать тип поля 
Упражнение 10:
Номер 1
Какого типа должно быть поле hasStadium (есть ли у школы стадион) класса School (школа)?
Ответ:
 (1) строкового типа 
 (2) числового типа 
 (3) логического типа 
Номер 2
Какого типа должно быть поле MathMark (оценка по математике) класса Pupil (Ученик)?
Ответ:
 (1) строкового типа 
 (2) числового типа 
 (3) логического типа 
Номер 3
Какого типа должно быть поле director (фамилия директора) класса School (школа)?
Ответ:
 (1) строкового типа 
 (2) числового типа 
 (3) логического типа 
Упражнение 11:
Номер 1
С каким модификатором доступа должно быть описано поле MySecret (мой секрет) класса Pupil (ученик), чтобы это поле было никому не доступно кроме самого ученика?
Ответ:
 (1) public 
 (2) private 
 (3) protected 
Номер 2
С каким модификатором доступа должно быть описано поле MyResume (мое резюме) класса Employee (сотрудник), чтобы это поле было доступно всем?
Ответ:
 (1) public 
 (2) private 
 (3) protected 
Номер 3
С каким модификатором доступа должно быть описано поле MyIllness (мои болезни) класса Man (человек), чтобы это поле было доступно только наследникам класса Man?
Ответ:
 (1) public 
 (2) private 
 (3) protected 
Упражнение 12:
Номер 1
Если при объявлении поля класса пропущен модификатор доступа, то компьютер сделает это поле
Ответ:
 (1) открытым (public) 
 (2) закрытым (private) 
 (3) защищенным (protected) 
Номер 2
Какое поле класса Pupil будет доступно экземпляру Ivanov в следующей программе?
class Pupil
{
public string name;
int income;
protected int age;
private string password;
}
class School
{
Pupil Ivanov = new Pupil ();
}
Ответ:
 (1) name 
 (2) income 
 (3) age 
 (4) password 
Номер 3
Есть класс School (школа), содержащий поля public string name (название школы), int income (доход школы), protected int plan (учебный план школы), private int marks (средняя успеваемость). Есть класс Colledge – наследник от School. Какие поля класса School будут доступны из класса Colledge?
Ответ:
 (1) name 
 (2) income 
 (3) plan 
 (4) marks 
Упражнение 13:
Номер 1
Какие из ниже перечисленных блоков кода ошибочны?
Ответ:
 (1)
class Firma
{
Firma Genius;
Genius=new Firma();
}
 
 (2)
class Firma
{
Firma=new Genius();
Firma Genius;
}
 
 (3)
class Firma
{
Firma=new Class(Genius);
}
 
Номер 2
О чем говорит команда Persons Man; компилятору С#?
Ответ:
 (1) компилятор С# данную команду воспримет как ошибку 
 (2) данная команда предупреждает компилятор С# о работе с объектом Man из класса Persons 
 (3) данная команда предупреждает компилятор С# о работе с объектом Persons из класса Men 
 (4) создание объекта 
 (5) объявление метода 
 (6) объявление объекта 
Упражнение 14:
Номер 2
О чем говорит команда Persons Man; компилятору С#?
Ответ:
 (1) компилятор С# данную команду воспримет как ошибку 
 (2) данная команда предупреждает компилятор С# о работе с объектом Man из класса Persons 
 (3) данная команда предупреждает компилятор С# о работе с объектом Persons из класса Man 
 (4) о создании объекта 
 (5) об объявлении метода 
 (6) об объявлении объекта 
Источник