Сообщение от меня 31.01.2016 на странице http://rchannel.azurewebsites.net/ChannelR/Details/7

ПОДНИМАЙТЕ БАЛКУ ВЫШЕ С СОБЫТИЯМИ, НАСЛЕДОВАНИЕМ, НАПРАВЛЕНИЕМ НИТИ… ПЫТАЙТЕСЬ НА СВОЙ СОБСТВЕННЫЙ РИСК.

НЕОБХОДИМЫЕ УСЛОВИЯ

Шучу, нужно, чтобы вышеперечисленное было. :)

А. ДЕЛЕГАТЫ

Делегаты позволяют ссылаться и выполнять несколько методов одновременно. (Делегат = указатель на функцию)

1. Создайте новое консольное приложение.

2. В методе Main program.cs введите:

delegate void myDelegate(string msg);

delegate void myDelegate(string message); ---- ›Объявление делегата с именем myDelegate

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

void ---- ›возвращаемый тип. этот делегат будет принимать только методы с возвращаемым типом void в качестве значения.

delegate ---- ›ключевое слово, используемое для создания делегата.

(string msg) ---- ›для работы делегату потребуются методы с 1 одностроковым параметром.

2. Помимо основного метода, определите следующие методы:

static void showMsg1(string message)
{

Console.WriteLine("Hello " + message);
}

static void showMsg2(string message)
{

Console.WriteLine("Welcome abord the Delegate ship. " + message);
}

3. Внутри метода Main введите:

MyDelegate objD = new MyDelegate(showMsg1);

MyDelegate objD = new MyDelegate ---- ›Создание экземпляра объекта делегата 'objD'. Обратите внимание, что делегаты могут быть созданы так же, как классы.

(showMsg1) ---- ›Инициализация метода showMsg1 для делегата.

objD += showMsg2;

myFunc += showMsg2; ---- ›Инициализировать метод showMsg2 для делегата myFunc

+= ---- ›myFunc = myFunc + showMsg2;

objD("Tom");
Console.ReadLine();

Результат:

Привет, Том
Добро пожаловать на борт корабля делегатов. Том

Б. СОБЫТИЕ

Событие - это особый тип делегата. Вы можете только добавить + = к событию или удалить - = методы из события. Примером события является то, что вы щелкаете левой кнопкой мыши, чтобы открыть Google Chrome (событие mouse left_click).

1. Создайте новое консольное приложение.

2. В program.cs создайте новый класс «Человек».

В классе «Человек»; тип:

class Person
{

public event EventHandler OnPropertyChange;

event ---- ›Ключевое слово, используемое для объявления события.

EventHandler ---- ›Делегат; используется, когда у нас нет информации о мероприятии.

string name ="";

public string Name
{
get
{
return name;
}

set
{
name = value;

Мы хотим вызывать это событие всякий раз, когда изменяется значение свойства (имя).

OnPropertyChange(this, new EventArgs());
}
}

onPropertyChange(this, new EventArgs()); ----> Запускает событие после изменения значения свойства.

this ---- ›В текущем контексте ключевое слово this используется для ссылки на объект класса Person.

new EventArgs() ---- ›EventArgs() class предоставляет значение для использования для событий, которые не содержат информации о событии.

}

3. В классе программ ›Главное событие введите:

Person objP = new Person();

objP.OnPropertyChanged += objP_OnPropertyChange;

+= objP_OnPropertyChange ---- ›Добавьте к событию метод с именем objP_OnPropertyChange.

Подсказка ---- ›Чтобы автоматически создать objP_OnPropertyChange method, после +=, дважды нажмите: tab.

objP.Name = "Tony Stark";

4. Вне главного события введите:

static void objP_OnPropertyChange(object sender, EventArgs e)
{

object sender ---- ›Объект, из которого произошло событие (в данном случае событие возникает в объекте свойства change 'name' из класса Person)

EventArgs e ---- ›Информация об аргументах события

Console.WriteLine("Sometimes you gotta run before you can walk.");
Console.ReadLine();
}

Результат. Иногда нужно бегать, прежде чем ходить.

C. НАЗВАНИЯ

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

1. Создайте новое консольное приложение.

2. В Program.cs за пределами пространства имен ProgramName {…} введите:

namespace TeamA
{

class Test
{
public static void Go()
{

}
}
}

namespace TeamB
{

class Test
{
public static void Go()
{

}
}
}

3. В методе Main введите:

TeamA.Test.Go();

TeamA.Test.Go(); ---- ›Доступ к методу тестового класса из пространства имен Team A

Подсказка: Вверху вместе с другими операторами using введите:

using TeamA

Теперь вы можете просто получить доступ к своему методу класса Test, набрав:

Test.Go();

Возможно, вы использовали пространства имен бессознательно; например, когда вы набираете: Console.WriteLine (...); В вашей программе есть ключевое слово using System. Действительно, класс Console присутствует в пространстве имен System.

D. НАСЛЕДОВАНИЕ

Вы спросите, зачем использовать наследование?

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

1. Создайте новое консольное приложение.

2. В program.cs вне метода Main введите:

class Person
{

public string Name;

public void myMethod()
{
Console.WriteLine(Name);
Console.ReadLine();
}
}

class Employee : Person
{

public string department;
}

class Employee : Person ---- ›Наследование; класс не может наследовать более чем от 1 класса

Employee : Person ---- ›Класс Employee наследуется от класса person.

Подсказка: Здесь класс человека - это суперкласс (базовый класс), от которого наследуется класс Employee.

3. В методе Main введите:

Employee objEmp = new Employee();
objEmp.Name = "Tom";

objEmp.Name = "Tom"; ---- ›Обратите внимание, что класс Employee теперь содержит переменные, методы и свойства класса Person.

objEmp.department = "Software Engineering";

objEmp.department = "Software Engineering"; ---- ›При наследовании от класса Person класс Employee не теряет никаких собственных переменных, методов и свойств.

objEmp.myMethod();

E. МОДИФИКАТОРЫ ЗАЩИЩЕННОГО ДОСТУПА

1. Создайте новое консольное приложение.

2. В Program.cs вне класса Program введите:

class Person
{
protected string Name;
}

3. В главном событии введите:

Program objP = new Program();
objP.Name = "Jake Roper";

objP.Name = "Jake Roper"; ---- ›Логическая ошибка« ApplicatioName.Person.Name недоступен из-за уровня защиты ».

Доступ к переменным и свойствам с модификатором защищенного доступа можно получить только в том классе, в котором они были определены (класс Person). Если только они не унаследованы другими классами!

4. Исправить эту логическую ошибку; Сделайте класс Program унаследованным от класса Person.

class Program : Person

Задача. Если вы решите принять ее, ваша миссия - применить следующие модификаторы доступа. Не стесняйтесь сообщать о своих результатах в разделе комментариев.

ModifierClassSubclassPublic ✓ ✓ Без модификатора ✓✗Private ✓✗

Подсказки:

1. Подкласс - это производный класс; например, мы использовали класс Program в качестве подкласса в вашем предыдущем упражнении.

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

F. ОСНОВЫ ОТРАЖЕНИЯ

Не паникуйте, ради этого возмутительного руководства по C # продвинутое кодирование Reflection будет рассмотрено в учебнике Ultimate C #.

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

Отражение обычно используется дизайнерами пользовательского интерфейса. В Microsoft Visual Studio, когда вы перетаскиваете кнопку в Windows Form или приложении ASP.NET, окно свойств использует отражение для отображения всех свойств этой кнопки, таких как свойства BackColor и BackgroundImage, как показано на снимке экрана ниже:

1. Создайте новое консольное приложение с именем MyReflection.

2. В пространстве имен myReflection, но за пределами класса Program, введите:

public class Employee
{

public int ID { get; set; }
public string FullName { get; set; }
}

3. Добавьте следующий оператор using вверху среди других операторов using в файл program.cs:

Using System.Reflection;

4. В основном методе введите:

Type myType = Type.GetType("MyReflection.Employee");

Type myType = Type.GetType("MyReflection.Employee"); ---- ›_ 101_ Получите информацию о свойствах класса Employee и сохраните ее в переменной myType.

Type ---- ›Класс

.GetType ---- ›методу требуется Namespace.ClassName в качестве параметра для возврата информации о свойствах класса.

PropertyInfo[] myProperties = myType.GetProperties();

PropertyInfo[] ---- ›Сохраните свойства класса Employee в массиве типа данных PropertyInfo.

myType.GetProperties(); ---- ›метод GetProperties используется для получения свойств класса Employee.

foreach (PropertyInfo item in myProperties)
{

Console.WriteLine(item.PropertyType + " " + item.Name);
}

Console.ReadLine();

5. Запустить приложение.

Результаты:

Идентификатор System.Int32
System.String FullName

G. РЕЗЮМЕ

Ключевое слово Abstract образовано от английского слова abstraction, которое означает удаление.

Абстрактные классы

1. Создайте новое консольное приложение.

2. В программном классе program.cs ›создайте абстрактный класс, набрав:

Быстрые советы:

  • Абстрактные члены, такие как свойства и методы, не могут быть закрытыми.
  • Класс, содержащий один или несколько абстрактных членов, должен быть определен как абстрактный класс.

abstract class myClass
{
public static string MyName { get; set; }

public static void Hello()
{
Console.WriteLine("Hello World");
Console.ReadLine();
}
}

3. В главном событии введите:

myClass A = new myClass();
myClass.Hello();

4. Запустите заявку.

Результат:

Обратите внимание, что абстрактные классы не могут быть созданы. Хорошо, что мы использовали статические свойства и методы, просто следующий код из вашей программы и готово:

myClass A = new myClass();

Тем не менее абстрактные классы могут быть унаследованы производными классами, но для простоты мы рассмотрим это в учебнике Ultimate C #.

З. РЕЗЬБА

Thread = Легкий процесс

Чтобы просмотреть процессы, запущенные в настоящее время в вашей операционной системе Microsoft Windows:

1. Щелкните правой кнопкой мыши на панели задач.

2. Щелкните Запустить диспетчер задач.

Чтобы применить концепцию многопоточности в своем приложении:

1. Создайте новое консольное приложение.

2. Добавьте следующий оператор using:

Using System.Threading

3. В program.cs введите:

static void WriteX()
{
for (int i = 0; i < 2000; i++) Console.Write(" X");
}

4. В главном событии введите:

Thread t = new Thread(WriteX);

Thread t ---- ›Объявить новую тему

_118 _---- ›Инициализируйте поток с помощью метода WriteX

t.Start();

t.Start(); ---- ›Выполнить метод WriteX ()

ДЕЛАТЬ ЧТО-ТО БЕЗ ОЖИДАНИЯ МЕТОДА WRITEX ДЛЯ ЗАВЕРШЕНИЯ ЗАПУСКА ОТ РЕЗЬБЫ T.

for (int i = 0; i < 2000; i++) Console.Write(" O");

Console.ReadLine();