написать код на си шарп с подробным пояснением.
Делегат без параметров:
Добавить к классу поле типа делегат (private).
Метод, заполняет поле типа делегат.
Метод, который запускает делегат, лежащий в поле.
В Program create объекты, вызывающие данный метод. В качестве параметра передайте подходящий static метод из Program (сделайте различные варианты разговора). Use анонимные делегаты и лямбда-выражения.
Create групповой делегат.
Сделайте объект, use групповой делегат (питомца, который говорит всеми возможными способами)
Метод, сравнивает эти поля в разных объектах. (Сравните 2-х питомцев – они разговаривают одинаково или нет).
csharp
using System;
class Pet
{
private Action talkDelegate;
public void SetTalkDelegate(Action talkDelegate)
{
this.talkDelegate = talkDelegate;
}
public void Talk()
{
talkDelegate?.Invoke();
}
public bool CompareTalkDelegate(Pet otherPet)
{
return talkDelegate == otherPet.talkDelegate;
}
}
Теперь в программе создадим объекты класса Pet и передадим им различные static методы из класса Program в качестве параметра для делегата. Мы также используем анонимный делегат и лямбда-выражение.
csharp
class Program
{
static void Main(string[] args)
{
Pet pet1 = new Pet();
Pet pet2 = new Pet();
// Параметр для делегата - метод, которые принимает и возвращает void и не принимает параметров
pet1.SetTalkDelegate(TalkMethod);
// Параметр для делегата - анонимный метод, который принимает и возвращает void и не принимает параметров
pet2.SetTalkDelegate(delegate
{
Console.WriteLine("Pet 2 says: Hello!");
});
// Параметр для делегата - лямбда-выражение, которое принимает и возвращает void и не принимает параметров
pet3.SetTalkDelegate(() => Console.WriteLine("Pet 3 says: Hi!"));
pet1.Talk();
pet2.Talk();
pet3.Talk();
bool areDelegatesEqual = pet1.CompareTalkDelegate(pet2);
Console.WriteLine("Are the delegates equal? " + areDelegatesEqual);
}
static void TalkMethod()
{
Console.WriteLine("Pet 1 says: Hi!");
}
}
Затем мы создаем групповой делегат, который может хранить несколько методов, и наш питомец будет использовать его для говорения всеми возможными способами.
csharp
class Program
{
delegate void TalkDelegate();
static void Main(string[] args)
{
Pet pet = new Pet();
TalkDelegate allTalks = null;
// Добавим методы в групповой делегат
allTalks += TalkMethod1;
allTalks += TalkMethod2;
pet.SetTalkDelegate(() =>
{
allTalks.Invoke();
});
pet.Talk();
}
static void TalkMethod1()
{
Console.WriteLine("Pet says method 1!");
}
static void TalkMethod2()
{
Console.WriteLine("Pet says method 2!");
}
}
Наконец, в классе Pet мы добавим метод CompareTalkDelegate для сравнения полей делегатов в двух объектах. Метод вернет true, если поля делегатов будут указывать на один и тот же метод, и false в противном случае.
csharp
using System;
class Pet
{
private Action talkDelegate;
public void SetTalkDelegate(Action talkDelegate)
{
this.talkDelegate = talkDelegate;
}
public void Talk()
{
talkDelegate?.Invoke();
}
public bool CompareTalkDelegate(Pet otherPet)
{
return talkDelegate == otherPet.talkDelegate;
}
}
class Program
{
static void Main(string[] args)
{
Pet pet1 = new Pet();
Pet pet2 = new Pet();
pet1.SetTalkDelegate(TalkMethod);
pet2.SetTalkDelegate(delegate
{
Console.WriteLine("Pet 2 says: Hello!");
});
pet1.Talk();
pet2.Talk();
bool areDelegatesEqual = pet1.CompareTalkDelegate(pet2);
Console.WriteLine("Are the delegates equal? " + areDelegatesEqual);
}
static void TalkMethod()
{
Console.WriteLine("Pet 1 says: Hi!");
}
}
Таким образом, мы создали класс Pet с полем делегата, методами для заполнения и выполнения делегата, а также методом для сравнения полей делегатов в двух объектах. В программе мы использовали различные методы для заполнения делегатов, включая статические методы из класса Program, анонимные делегаты и лямбда-выражения. Мы также показали, как создать и использовать групповой делегат.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет