 Arrays and Delegates

 Introduction
 To further refine the call to a group of methods that perform the same kind of task, you can declare an array of delegates. First, create the necessary delegate. Here is an example: ```using System; delegate double Measure(double R); public static class Program { static int Main(string[] args) { return 0; } }```

Before creating the array, you must first know or have the methods you would be referring to. These methods must have a similar signature. This means that they must return the same type of value, they must have the same number of arguments and they must  have the  same type(s) of argument(s), if any. Here are examples of such functions:

```using System;

delegate double Measure(double R);

public class Circle
{
const double PI = 3.14159;

{
return Radius * 2;
}

{
return Diameter(Radius) * PI;
}

{
}
}

public static class Program
{
static int Main()
{
return 0;
}
}```
 An Array of Delegates

To create an array of delegates, declare a normal array as we have done so far. You can initialize each member using its index and calling the corresponding method. This can be done as follows:

```using System;

delegate double Measure(double R);

public class Circle
{
const double PI = 3.14159;

public double Diameter(double Radius)
{
return Radius * 2;
}

public double Circumference(double Radius)
{
return Diameter(Radius) * PI;
}

public double Area(double Radius)
{
}
}

public static class Program
{
static int Main()
{
double R = 12.55;
Circle circ = new Circle();
Measure[] Calc = new Measure;

Calc = new Measure(circ.Diameter);
double D = Calc(R);
Calc = new Measure(circ.Circumference);
double C = Calc(R);
Calc = new Measure(circ.Area);
double A = Calc(R);

Console.WriteLine("Circle Characteristics");
Console.WriteLine("Diameter:      {0}", D);
Console.WriteLine("Circumference: {0}", C);
Console.WriteLine("Area:          {0}\n", A);

return 0;
}
}```

This would produce:

```Circle Characteristics
Diameter:      25.1
Circumference: 78.8539
Area:          494.808``` Practical Learning: Using an Array of Delegates
1. Start Microsoft Visual C# Express Edition and create a new Console Application named MultipleChoiceQuestion1
2. Change the Program.cs file as follows:

 ```using System; namespace MultipleChoiceQuestion1 { public class Program { enum TMCQuestion { One, Two, Three, Four, Five }; delegate char Question(); static char Sequence() { char Answer; Console.WriteLine("Which sequence of numbers does not appear "); Console.WriteLine("to follow a recognizable order?"); Console.WriteLine("(a) 3 9 27 33"); Console.WriteLine("(b) 3 6 9 12"); Console.WriteLine("(c) 2 4 6 8"); Console.WriteLine("(d) 102 204 408 816"); Console.Write("Your Answer? "); Answer = char.Parse(Console.ReadLine()); return Answer; } static char Expression() { char Response; Console.WriteLine("Select the best expression to complete the empty space"); Console.WriteLine("When ... drugs to a business address, traffickers often "); Console.WriteLine("omit a recipient name"); Console.WriteLine("(a) to send"); Console.WriteLine("(b) senders"); Console.WriteLine("(c) sending"); Console.WriteLine("(d) dealing"); Console.Write("Your Answer? "); Response = char.Parse(Console.ReadLine()); return Response; } static char Sentence() { char Answer; Console.WriteLine("Even ... there are 76,000 lawyers in that city, "); Console.WriteLine("it is still a small community"); Console.WriteLine("(a) although"); Console.WriteLine("(b) though"); Console.WriteLine("(c) for"); Console.WriteLine("(d) since"); Console.Write("Your Answer? "); Answer = char.Parse(Console.ReadLine()); return Answer; } static char WrongWord() { char Wrong; Console.WriteLine("Select the wrong word that would complete "); Console.WriteLine("the sentence"); Console.WriteLine("For this type of business, revenue gains are ..."); Console.WriteLine("(a) limited"); Console.WriteLine("(b) scarce"); Console.WriteLine("(c) limitless"); Console.WriteLine("(d) claiming"); Console.Write("Your Answer? "); Wrong = char.Parse(Console.ReadLine()); return Wrong; } static char Right() { char Sentence; Console.WriteLine("Select the right sentence"); Console.WriteLine("(a) The company is expecting to reducing inventory,"); Console.WriteLine(" control cost, and efficiency improvement."); Console.WriteLine("(b) The company expects to reduce inventory,"); Console.WriteLine(" control cost, and improve efficiency."); Console.WriteLine("(c) The company expects to reduce inventory,"); Console.WriteLine(" control cost, and improving efficiency."); Console.WriteLine("(d) The company is expecting to reducing inventory,"); Console.WriteLine(" controlling cost, and efficiency improvement."); Console.Write("Your Answer? "); Sentence = char.Parse(Console.ReadLine()); return Sentence; } static int Main() { const int NumberOfQuestions = 5; char[] Answer = new char[NumberOfQuestions]; Question[] MCQ = new Question[NumberOfQuestions]; MCQ = new Question(Sequence); MCQ = new Question(Expression); MCQ = new Question(Sentence); MCQ = new Question(WrongWord); MCQ = new Question(Right); for (int i = 0; i < NumberOfQuestions; i++) { Console.WriteLine("Question {0}", i + 1); Answer[i] = MCQ[i](); ValidateAnswer(i + 1, Answer[i]); Console.WriteLine(); } return 0; } static void ValidateAnswer(int QstNbr, char Ans) { switch (QstNbr) { case 1: if (Ans == 'a' || Ans == 'A') Console.WriteLine("Right Answer"); else { Console.WriteLine("Wrong Answer - The right answer was 'a'"); Console.WriteLine("(a) Starting at 3, 3*3=9 and 3*9=27"); Console.WriteLine(" There is no obvious way to determine 33"); } break; case 2: if (Ans == 'c' || Ans == 'C') Console.WriteLine("Right answer"); else Console.WriteLine("Wrong Answer - The right answer was 'c'"); break; case 3: if (Ans == 'b' || Ans == 'B') Console.WriteLine("Right answer"); else Console.WriteLine("Wrong Answer - The right answer was 'b'"); break; case 4: if (Ans == 'd' || Ans == 'D') Console.WriteLine("Right answer"); else Console.WriteLine("Wrong Answer - The right answer was 'd'"); break; case 5: if (Ans == 'b' || Ans == 'B') Console.WriteLine("Right answer"); else Console.WriteLine("Wrong Answer - The right answer was 'b'"); break; default: Console.WriteLine("Invalid Answer"); break; } } } }```
3. Execute the application and test it. Here is an example:

 ```Question 1 Which sequence of numbers does not appear to follow a recognizable order? (a) 3 9 27 33 (b) 3 6 9 12 (c) 2 4 6 8 (d) 102 204 408 816 Your Answer? a Right Answer Question 2 Select the best expression to complete the empty space When ... drugs to a business address, traffickers often omit a recipient name (a) to send (b) senders (c) sending (d) dealing Your Answer? d Wrong Answer - The right answer was 'c' Question 3 Even ... there are 76,000 lawyers in that city, it is still a small community (a) although (b) though (c) for (d) since Your Answer? b Right answer Question 4 Select the wrong word that would complete the sentence For this type of business, revenue gains are ... (a) limited (b) scarce (c) limitless (d) claiming Your Answer? d Right answer Question 5 Select the right sentence (a) The company is expecting to reducing inventory, control cost, and efficiency improvement. (b) The company expects to reduce inventory, control cost, and improve efficiency. (c) The company expects to reduce inventory, control cost, and improving efficiency. (d) The company is expecting to reducing inventory, controlling cost, and efficiency improvement. Your Answer? a Wrong Answer - The right answer was 'b' Press any key to continue . . .```
4. Close the DOS window