Uczę się o delegatach. Kilka dni temu zrobiłem próbkę dla delegatów ds. Multiemisji i przejrzałem tutaj My previous question i jasno zrozumiałem o delegacie multicastowym.Delegat ds. Multiemisji i wydarzenie
Ale teraz próbuję zrobić próbkę delegata multiemisji ze zdarzeniem. Ale mam pewne wątpliwości podczas robienia próbki. W powyższym linku zrobiłem wszystkie funkcje i delegowałem deklarację w jednej klasie i dodałem funkcję do delegowania za pomocą + = i po prostu dzwoń do delegata. A więc wszystkie funkcje wewnątrz delegatów są wywoływane.
Ale teraz robię to w dwóch różnych klasach i próbuję wykonywać wszystkie funkcje przy pomocy zdarzenia. Podaję mój obecny kod poniżej.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
ArithmeticOperations aOperations = new ArithmeticOperations();
aOperations.StartCalculations += new ArithmeticOperations.BasicCalculations(aOperations_StartCalculations);
aOperations.PerformCalculations(20, 10);
}
void aOperations_StartCalculations(string msg)
{
MessageBox.Show(msg);
}
}
class ArithmeticOperations
{
public delegate void BasicCalculations(string msg);
public event BasicCalculations StartCalculations;
public void PerformCalculations(int n1, int n2)
{
StartCalculations("Operation Success");
}
void Add(int num1, int num2)
{
MessageBox.Show("Performing addition.");
}
void Sub(int num1, int num2)
{
MessageBox.Show("Performing substraction.");
}
void Mul(int num1, int num2)
{
MessageBox.Show("Performing multiplication.");
}
void Div(int num1, int num2)
{
MessageBox.Show("Performing division.");
}
}
Tutaj w Form1 jest mój główny klasa i klasa ArithmeticOperations używa do wykonywania funkcji. Kiedy o tym stwierdzeniem
aOperations.PerformCalculations(20, 10);
w Form1, funkcja PerformCalculation() w klasie ArithmeticOperations wykona.
Ale mam wątpliwości, jak zarejestrować wszystkie funkcje Add, Sub, Mul i Div dla delegata w klasie AritmeticOperations, aby wywołać wszystkie funkcje, po prostu wywołując obiekt delegata i zwróć "Operacja Success" do funkcji zwrotnej zdarzenia w Form1 klasa ?
Twój typ delegata 'BasicCalculations' (który jest zagnieżdżony wewnątrz klasy, dlaczego?) ma sig nature 'BasicCalculations (string msg)', więc przyjmuje jeden argument, który jest 'string'. Twoja metoda "Add" itd. Przyjmuje dwa argumenty, oba z nich są "int". Jak więc ta metoda może bezpośrednio pasować do twojego wydarzenia? –
Ups ... Nie widziałem tego ... ur right ... thankx – Arun