如果它只是一個靜態類,則不需要未初始化的對象。一旦你得到的類型,例如
Type t = asm.GetType("NAMESPACE.CLASS");
你可以得到你需要
MethodInfo method = t.GetMethod("MethodName");
//getmethod has some useful overloads
//also GetMethods() returns a MethodInfo[] array containing all methods
,那麼你可以調用
object result = method.Invoke(null, new object[] { param1, param2, ... });
有這樣做,以及其他的方式方法。您可以使用委託來獲取指向該方法的函數指針,而不是調用invoke。
我不確定如何做事件處理程序,雖然我確定如果您在Type對象下瀏覽intellisense,您應該能夠找到某些東西。就屬性而言,通常只使用它們作爲對象,但如果要使用靜態類的屬性,並且事先已知道返回類型,則可以創建一個類來處理它:
public class ExternalProperty<PropertyType>
{
delegate PropertyType GetFunction();
delegate void SetFunction(PropertyType value);
GetFunction GetValue;
SetFunction SetValue;
public ExternalProperty(PropertyInfo externalProperty)
{
MethodInfo getMethod = externalProperty.GetGetMethod();
GetFunction getter = (GetFunction)Delegate.CreateDelegate(typeof(GetFunction), getMethod);
MethodInfo setMethod = externalProperty.GetSetMethod();
SetFunction setter = (SetFunction)Delegate.CreateDelegate(typeof(SetFunction), setMethod);
}
public PropertyType Value
{
get { return GetValue(); }
set
{
SetValue(value);
}
}
}
如果你已經知道屬性類型,使用這個類很容易。假設你有一個字符串類型的屬性名稱:
ExternalProperty<string> PropName = new ExternalProperty(t.GetProperty("Name"));
string oldName = PropName.Value; //this will call the property's getter
PropName.Value = "new name"; //this will call the property's setter
它沒有錯誤檢查,但這樣,如果你嘗試通過比指定,或一個不同類型的屬性,無法找到它,它會打破。這也不適用於對象,只適用於靜態類。希望有所幫助。
第4步有一個錯字:應該是'ilasm ThirdParty.il/dll /key=MyKey.snk'謝謝你的回答:) –
@John:謝謝,糾正。 – adrianbanks