illustrates a custom exception


   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example13_9.cs illustrates a custom exception
*/

using System;


// declare the CustomException class
class CustomException : ApplicationException
{

  public CustomException(string Message) : base(Message)
  {

    // set the HelpLink and Source properties
    this.HelpLink = "See the Readme.txt file";
    this.Source = "My Example13_9 Program";

  }

}


public class Example13_9
{

  public static void Main()
  {

    try
    {

      // throw a new CustomException object
      Console.WriteLine("Throwing a new CustomException object");
      throw new CustomException("My CustomException message");

    }
    catch (CustomException e)
    {

      // display the CustomException object's properties
      Console.WriteLine("HelpLink = " + e.HelpLink);
      Console.WriteLine("Message = " + e.Message);
      Console.WriteLine("Source = " + e.Source);
      Console.WriteLine("StackTrace = " + e.StackTrace);
      Console.WriteLine("TargetSite = " + e.TargetSite);

    }

  }

}


           
          


Exception handle with your own exception class


   

/*
Learning C# 
by Jesse Liberty

Publisher: O'Reilly 
ISBN: 0596003765
*/
 using System;

 namespace ExceptionHandling
 {
     // custom exception class
     class MyCustomException :
         System.ApplicationException
     {
         public MyCustomException(string message):
             base(message) // pass the message up to the base class
         {

         }
     }

    public class TesterExceptionHandling
    {
       public void Run()
       {
           try
           {
               Console.WriteLine("Open file here");
               double a = 0;
               double b = 5;
               Console.WriteLine ("{0} / {1} = {2}",
                   a, b, DoDivide(a,b));
               Console.WriteLine (
                   "This line may or may not print");
           }

               // most derived exception type first
           catch (System.DivideByZeroException e)
           {
               Console.WriteLine(
                   "
DivideByZeroException! Msg: {0}",
                   e.Message);
               Console.WriteLine(
                   "
HelpLink: {0}
", e.HelpLink);
           }

           // catch custom exception
           catch (MyCustomException e)
           {
               Console.WriteLine(
                   "
MyCustomException! Msg: {0}",
                   e.Message);
               Console.WriteLine(
                   "
HelpLink: {0}
", e.HelpLink);
           }
           catch     // catch any uncaught exceptions
           {
               Console.WriteLine(
                   "Unknown exception caught");
           }
           finally
           {
               Console.WriteLine ("Close file here.");
           }
       }

        // do the division if legal
        public double DoDivide(double a, double b)
        {
            if (b == 0)
            {
                DivideByZeroException e =
                    new DivideByZeroException();
                e.HelpLink=
                    "http://www.libertyassociates.com";
                throw e;
            }
            if (a == 0)
            {
                // create a custom exception instance
                MyCustomException e =
                    new MyCustomException(
                    "Can't have zero divisor");
                e.HelpLink =
                    "http://www.libertyassociates.com/NoZeroDivisor.htm";
                throw e;
            }
            return a/b;
        }

        static void Main()
        {
            Console.WriteLine("Enter Main...");
            TesterExceptionHandling t = new TesterExceptionHandling();
            t.Run();
            Console.WriteLine("Exit Main...");
        }
    }
 }

           
          


Shows how multiple objects may subscribe to the same event


   


/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
 // Subscrib.cs -- Shows how multiple objects may subscribe to the same
//                event.
//
//                Compile this program with the following command line:
//                    C:>csc Subscrib.cs
using System;

namespace nsEvents
{
    public class Subscrib
    {
        // Declare an instance of the clsDelegate class. The event variable
        // is not static.
        static public clsDelegate dlg = new clsDelegate ();
        static public void Main ()
        {
            // Add clsMain to the event list
            dlg.DoEvent += new clsDelegate.StringHandler (ShowEvent);
            // Create subscribers for the event
            clsSubscriber sub = new clsSubscriber ();
            clsNextSubscriber sub2 = new clsNextSubscriber ();
            // Fire the event.
            dlg.FireEvent ("Fired from Main()");
        }
        static public void ShowEvent (string str)
        {
            Console.WriteLine ("Main handled event: " + str);
        }
    }


    public class clsDelegate
    {
        
        // Declare a delegate for the event
        public delegate void StringHandler (string str);
        
        // A variable to hold the delegate
        public event StringHandler DoEvent;
        
        // This method will trigger the event.
        public void FireEvent (string str)
        {
            if (DoEvent != null)
                DoEvent (str);
        }
    }

    public class clsSubscriber
    {
        public clsSubscriber ()
        {
            Subscrib.dlg.DoEvent +=
                         new clsDelegate.StringHandler (SubscribeEvent);
        }
        public void SubscribeEvent (string str)
        {
            Console.WriteLine ("Subscriber handled event: " + str);
        }
    }
    public class clsNextSubscriber
    {
        public clsNextSubscriber ()
        {
            Subscrib.dlg.DoEvent +=
                         new clsDelegate.StringHandler (SubscribeEvent);
        }
        public void SubscribeEvent (string str)
        {
            Console.WriteLine ("Next Subscriber handled event: " + str);
        }
    }
}




           
          


Demonstrate passing an object to an event handler and performing the proper cast in the method


   


/*
C# Programming Tips & Techniques
by Charles Wright, Kris Jamsa

Publisher: Osborne/McGraw-Hill (December 28, 2001)
ISBN: 0072193794
*/
 
// ObjEvent.cs -- Demonstrate passing an object to an event handler and
//                performing the proper cast in the method.
//
//                Compile this program with the following command line:
//                    C:>csc ObjEvent.cs
using System;

namespace nsEvents
{
    public class ObjEvent1
    {
        public delegate void EventHandler (object obj);
        public event EventHandler EvInvoke;

        public void FireEvent (object obj)
        {
            if (obj != null)
                EvInvoke (obj);
        }

        static public void Main ()
        {
            ObjEvent1 main = new ObjEvent1 ();
            main.EvInvoke = new ObjEvent1.EventHandler (ObjEvent);
            main.FireEvent (42);
            main.FireEvent (42.0);
        }
        static void ObjEvent (object obj)
        {
            if (obj is double)
            {
                Console.WriteLine ("Received a double object: " + (double) obj);
            }
            else if (obj is int)
            {
                Console.WriteLine ("Received an int object: " + (int) obj);
            }
        }
    }
}



           
          


illustrates the use of an event


   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/
/*
  Example12_4.cs illustrates the use of an event
*/

using System;


// declare the MeltdownEventArgs class (implements EventArgs)
class MeltdownEventArgs : EventArgs
{

  // declare a private field named message
  private string message;

  // define a constructor
  public MeltdownEventArgs(string message)
  {
    this.message = message;
  }

  // define a property to get the message
  public string Message
  {
    get
    {
      return message;
    }
  }

}


// declare the Reactor class
class Reactor
{

  // declare a private field named temperature
  private int temperature;

  // declare a delegate class named MeltdownHandler
  public delegate void MeltdownHandler(
    object reactor,
    MeltdownEventArgs myMEA
  );

  // declare an event named OnMeltdown
  public event MeltdownHandler OnMeltdown;

  // define a property to set the temperature
  public int Temperature
  {
    set
    {
      temperature = value;

      // if the temperature is too high, the reactor melts down
      if (temperature > 1000)
      {
        MeltdownEventArgs myMEA =
          new MeltdownEventArgs("Reactor meltdown in progress!");
          OnMeltdown(this, myMEA);
      }
    }
  }

}


// declare the ReactorMonitor class
class ReactorMonitor
{

  // define a constructor
  public ReactorMonitor(Reactor myReactor)
  {
    myReactor.OnMeltdown +=
      new Reactor.MeltdownHandler(DisplayMessage);
  }

  // define the DisplayMessage() method
  public void DisplayMessage(
    object myReactor, MeltdownEventArgs myMEA
  )
  {
    Console.WriteLine(myMEA.Message);
  }

}


public class Example12_4
{

  public static void Main()
  {

    // create a Reactor object
    Reactor myReactor = new Reactor();

    // create a ReactorMonitor object
    ReactorMonitor myReactorMonitor = new ReactorMonitor(myReactor);

    // set myReactor.Temperature to 100 degrees Centigrade
    Console.WriteLine("Setting reactor temperature to 100 degrees Centigrade");
    myReactor.Temperature = 100;

    // set myReactor.Temperature to 500 degrees Centigrade
    Console.WriteLine("Setting reactor temperature to 500 degrees Centigrade");
    myReactor.Temperature = 500;

    // set myReactor.Temperature to 2000 degrees Centigrade
    // (this causes the reactor to meltdown)
    Console.WriteLine("Setting reactor temperature to 2000 degrees Centigrade");
    myReactor.Temperature = 2000;

  }

}


           
          


Calling Native DLL Functions


   

/*
A Programmer's Introduction to C# (Second Edition)
by Eric Gunnerson

Publisher: Apress  L.P.
ISBN: 1-893115-62-3
*/
// 31 - InteropCalling Native DLL Functions
// copyright 2000 Eric Gunnerson
using System.Runtime.InteropServices;

public class CallingNativeDLLFunctions
{
    [DllImport("user32.dll")]
    public static extern int MessageBox(int h, string m, 
    string c, int type);
    public static void Main()
    {
        int retval = MessageBox(0, "Hello", "Caption", 0);
    }
}

           
          


Creates a library assembly

   

/*
Mastering Visual C# .NET
by Jason Price, Mike Gunderloy

Publisher: Sybex;
ISBN: 0782129110
*/


/*
  Example16_2.cs creates a library assembly
*/

// compile with: csc /target:library Example16_2.cs

using System;
using System.Reflection;
using System.Windows.Forms;

[assembly:AssemblyVersionAttribute("1.0.0.0")]
[assembly:AssemblyTitleAttribute("Example 16.2")]

public class Example16_2 
{
  string privateString;

  public string inString 
  {
    get 
    {
      return privateString;
    }
    set
    {
      privateString = inString;
    }
  }

  public void upper(out string upperString)
  {
    upperString = privateString.ToUpper();
  }

}