73 lines
1.8 KiB
C#
73 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
|
|
namespace BizHawk.Common.ReflectionExtensions
|
|
{
|
|
/// <summary>
|
|
/// Reflection based helper methods
|
|
/// </summary>
|
|
public static class ReflectionUtil
|
|
{
|
|
/// <summary>
|
|
/// Takes an object and determines if it has methodName as a public method
|
|
/// </summary>
|
|
/// <returns>Returns whether or not the obj both contains the method name and the method is public</returns>
|
|
public static bool HasExposedMethod(this object obj, string methodName)
|
|
{
|
|
var method = obj.GetType().GetMethod(methodName);
|
|
|
|
if (method != null)
|
|
{
|
|
return method.IsPublic;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Takes an object and invokes the method
|
|
/// The method must exist and be public
|
|
/// </summary>
|
|
/// <returns>The return value of the method, as an object.
|
|
/// If the method returns void, the return value is null
|
|
/// If the method does not exist or is not public, it returns null
|
|
/// </returns>
|
|
public static object InvokeMethod(this object obj, string methodName, object[] args)
|
|
{
|
|
var method = obj.GetType().GetMethod(methodName);
|
|
if (method != null && method.IsPublic)
|
|
{
|
|
return method.Invoke(obj, args);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public static bool HasPublicProperty(this object obj, string propertyName)
|
|
{
|
|
var property = obj.GetType().GetProperty(propertyName);
|
|
|
|
if (property != null)
|
|
{
|
|
return property.CanRead;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static object GetPropertyValue(this object obj, string propertyName)
|
|
{
|
|
var property = obj.GetType().GetProperty(propertyName);
|
|
if (property != null && property.CanRead)
|
|
{
|
|
return property.GetValue(obj, null);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|