/*
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;
}
}
|