As you may know, Microsoft is getting into the open source community with the ASP.NET and DNX with the mono project.
The .NET Execution Environment (DNX) is a software development kit which allows you to run .NET applications on Windows, Mac, and Linux using different frameworks such as .NET framework, .NET Core, and Mono. However, everything are not roses. There are many incomplete libraries, incompatibilities, lack of documentation, and most of the examples such as doing SQL or SOAP do not work depending on which the library targets you are planning to code for. Therefore, I decided to test the basics on all the library targets. I am starting with DNX451.
Delegate seems to be working fine in DNX451 with C#. Below is a code example for those who wish to play with it.
Program.cs
using System; namespace ConsoleApp1 { public class Program { public void Main(string[] args){ Console.WriteLine("Main()"); displayWhichDnxIsCompilingOn(); new DelegateExample(); } private void displayWhichDnxIsCompilingOn(){ #if DNX451 Console.WriteLine("Compiled on DNX451: .NET Framework"); #endif #if DNXCORE50 Console.WriteLine("Compiled on DNXCORE50: .NET Core 5"); #endif } } } |
DelegateExample.cs
using System; namespace ConsoleApp1 { public class DelegateExample { delegate void SomeDelegate(); delegate void Operation(int number); public DelegateExample() { Console.WriteLine("\nDelegateExample()"); // Calling directly SampleMethod(); // Calling using delegate SomeDelegate del = new SomeDelegate(SampleMethod); del.Invoke(); // Another way to use delegate SomeDelegate del2 = SampleMethod; del2(); // Calling delegate within method CallingDelegate(del2); // Getting a delegate del2 = GetDelegate(); CallingDelegate(del2); Console.WriteLine("----"); // Displaying Values Operation op = DisplaySquare; ExecuteOperation(2, op); op = DisplayCube; ExecuteOperation(2, op); Console.WriteLine("----"); // Add Methods to execute op = DisplaySquare; op = op + DisplayCube; ExecuteOperation(2, op); Console.WriteLine("----"); // Add and substract methods to execute op = DisplaySquare; op += DisplayCube; op += DisplayCube; op += DisplayCube; ExecuteOperation(2, op); Console.WriteLine("----"); // Instead of displaying square once and cube three times, we wish to do square once and cube double. // Lets remove one op -= DisplayCube; ExecuteOperation(2, op); Console.WriteLine("----"); // Action is like delegates for functions that doesn't return something. Action<int> actionOp = number => { Console.WriteLine("{0} x {0} x {0} = {1}", number, number * number * number); }; actionOp(2); Console.WriteLine("------"); // Action is like delegate for function that accept parameters and have a return value. Func<int, int> funcOp = number => { return number * number * number * number; }; Console.WriteLine("{0} x {0} x {0} x {0} = {1}", 2, funcOp(2)); } private void SampleMethod(){ Console.WriteLine("\tSampleMethod()"); } private void CallingDelegate(SomeDelegate sDel){ sDel(); } private SomeDelegate GetDelegate(){ return new SomeDelegate(SampleMethod); } private void DisplaySquare(int number){ Console.WriteLine("{0} x {0} = {1}", number, number * number); } private void ExecuteOperation(int num, Operation operation){ operation(num); } private void DisplayCube(int number){ Console.WriteLine("{0} x {0} x {0} = {1}", number, number * number * number); } } } |
Output:
AGCRM-MacBook-Pro:Examples user$ dnx . me Main() Compiled on DNX451: .NET Framework DelegateExample() SampleMethod() SampleMethod() SampleMethod() SampleMethod() SampleMethod() ---- 2 x 2 = 4 2 x 2 x 2 = 8 ---- 2 x 2 = 4 2 x 2 x 2 = 8 ---- 2 x 2 = 4 2 x 2 x 2 = 8 2 x 2 x 2 = 8 2 x 2 x 2 = 8 ---- 2 x 2 = 4 2 x 2 x 2 = 8 2 x 2 x 2 = 8 ---- 2 x 2 x 2 = 8 ------ 2 x 2 x 2 x 2 = 16 |
© 2015, Alejandro G. Carlstein Ramos Mejia. All rights reserved.