The blog has moved to a new address. The blog is now located at http://devintelligence.com

Adsense

Thursday, January 31, 2008

System.Reflection - MethodInfo class (usage)

A MethodInfo class provides detailed information about a single method of a class or an interface. The reflected method may be a static method or an instance method. The MethodInfoSpy example shows how to obtain the method information of a class including the access modifiers, type or input parameters:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Reflection;

namespace MethodInfoSpy
{
class Program
{

static void Main(string[] args)
{
Type type = typeof(Program);
MethodInfo [] methodInfos = type.GetMethods();
foreach (MethodInfo methodInfo in methodInfos)
{
// retrive method information
Console.WriteLine("Name: {0}, Public: {1}, Is Static: {2}, Return Type: {3}",
methodInfo.Name,
methodInfo.IsPublic,
methodInfo.IsStatic,
methodInfo.ReturnType.FullName);

// retrive method parameters information
ParameterInfo [] paramInfos = methodInfo.GetParameters();
foreach (ParameterInfo paramInfo in paramInfos)
{
Console.WriteLine("Parameter Name: {0}, Parameter Type: {1}",
paramInfo.Name, paramInfo.ParameterType.FullName);
}
}
Console.ReadLine();
}


public void DoNothing()
{
}

public int Add(int x, int y)
{
return x + y;
}
}
}



A sample of the output follows:








Name: DoNothing, Public: True, Is Static: False, Return Type: System.Void

Name: Add, Public: True, Is Static: False, Return Type: System.Int32


Parameter Name: x, Parameter Type: System.Int32


Parameter Name: y, Parameter Type: System.Int32


Name: GetType, Public: True, Is Static: False, Return Type: System.Type


Name: ToString, Public: True, Is Static: False, Return Type: System.String


Name: Equals, Public: True, Is Static: False, Return Type: System.Boolean


Parameter Name: obj, Parameter Type: System.Object


Name: GetHashCode, Public: True, Is Static: False, Return Type: System.Int32




 



Technorati Tags: ,

How to support != and == operations for C# struct

Sometimes we prefer to use structs instead classes .The C# is a convenient way to store coordinates ,complex number etc .
In an example below I'm presenting how to support == and != operators in case we want to check if our structs are equal.

 

// <summary>
/// Circle
/// </summary>
struct Circle
{
public Point Center;
public double Radius;

/// <summary>
/// Compares two Circle objects. The result specifies whether the values
/// of the Center or Radius properties of the two Circle objects are equal.
/// </summary>
/// <param name="left">A Circle to compare.</param>
/// <param name="right">A Circle to compare.</param>
/// <returns>true if the the Center properties or the Radius properties
/// of left and right are equal; otherwise, false.</returns>
public static bool operator ==(Circle left, Circle right)
{
return (left.Center == right.Center) && (left.Radius == right.Radius);
}

/// <summary>
/// Compares two Circle objects. The result specifies whether the values
/// of the Center or Radius properties of the two Circle objects are unequal.
/// </summary>
/// <param name="left">A Circle to compare.</param>
/// <param name="right">A Circle to compare.</param>
/// <returns>true if the values of either the Center properties
/// or the Radius properties of left and right differ; otherwise, false.</returns>
public static bool operator !=(Circle left, Circle right)
{
return !(left == right);
}


/// <summary>
/// Specifies whether this Circle contains the same Center and Radius as
/// the specified Object.
/// </summary>
/// <param name="obj">Another object to compare to.</param>
/// <returns>
/// true if obj is a Point and has the same Center and Radius as this Circle.
/// </returns>
public override bool Equals(object obj)
{
if (!(obj is Circle))
{
return false;
}
Circle circle = (Circle)obj;
return (circle.Center == this.Center) && (circle.Radius == this.Radius);
}

/// .... You need to overload GetHashCode and ToString methods

}



Testing our struct ...




static void Main(string[] args)


Circle circle1 = new Circle();
circle1.Center = new Point(10, 10);
circle1.Radius = 20;


Circle circle2 = new Circle();
circle2.Center = new Point(10, 10);
circle2.Radius = 20;


bool result = (circle1==circle2);
Console.WriteLine("Is circle1 equal to circle2? [{0}]", result );

circle2.Center = new Point(14, 10);
result = (circle1 == circle2);
Console.WriteLine("Is circle1 equal to circle2? [{0}]", result);

Console.ReadLine();



 



Technorati Tags: ,,