passing a method

  • Thread starter Thread starter memememe
  • Start date Start date
M

memememe

Is there a way to pass a method as a paramenter when you call a method,
kinda like you do when you create an event handler.
Basically I want to be able to call method A() and tell it to call method
B() but sometimes I want it to call method C(). I know how to design this if
I use interfaces or abstract classes, B() and C() will share signature, and
will most likely be members of similar classes, so using interfaces or
abstract classes is a choice, I just want to know if there is a way to pass
a method as a parameter as an alternative choice.
 
look up System.Delegate

Example:

using System;
public class SamplesDelegate {

// Declares a delegate for a method that takes in an int and returns a
String.
public delegate String myMethodDelegate( int myInt );

// Defines some methods to which the delegate can point.
public class mySampleClass {

// Defines an instance method.
public String myStringMethod ( int myInt ) {
if ( myInt > 0 )
return( "positive" );
if ( myInt < 0 )
return( "negative" );
return ( "zero" );
}

// Defines a static method.
public static String mySignMethod ( int myInt ) {
if ( myInt > 0 )
return( "+" );
if ( myInt < 0 )
return( "-" );
return ( "" );
}
}

public static void Main() {

// Creates one delegate for each method.
mySampleClass mySC = new mySampleClass();
myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
myMethodDelegate myD2 = new myMethodDelegate(
mySampleClass.mySignMethod );

// Invokes the delegates.
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ),
myD2( 5 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3,
myD1( -3 ), myD2( -3 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ),
myD2( 0 ) );
}

}


/*
This code produces the following output:

5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".
*/
 
Hi,

Delegates are what you are looking for.

You can pass a delegate as a parameter and then call the targed method
through this delegate.

HTH
B\rgds
100
 
yeap, thats exactly what I want, I hadn't thought about using delegates like
that, makes perfect sense :-)
 
Back
Top