/* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794 */ // StaticDl.cs -- Demonstrate using a static delegate without declaring // an instance of the class. // // Compile this program with the following command line: // C:>csc StaticDl.cs using System; namespace nsDelegates { public class StaticDl { public delegate void StringHandler (string str); static public StringHandler DoString; static public void Main () { // Create a delegate in this class DoString = new StringHandler (ShowString); DoString ("Static delegate called"); // // Show that the static constructor in another class is shared by instances clsDelegate.DoMath = new clsDelegate.MathHandler (SquareRoot); clsDelegate dlg1 = new clsDelegate (49); clsDelegate dlg2 = new clsDelegate (3.14159); } // The method used with the string delegate static private void ShowString (string str) { Console.WriteLine (str); } // The method used with the double delegate static private double SquareRoot (double val) { double result = Math.Sqrt (val); Console.WriteLine ("The square root of " + val + " is " + result); return (result); } } class clsDelegate { public delegate double MathHandler (double val); static public MathHandler DoMath; // The constructor invokes the delegate if it is not null. public clsDelegate (double val) { value = val; if (DoMath != null) sqrt = DoMath (value); } double value; double sqrt = 0; } }