我想創建一個自定義屬性以應用於類中的任何方法,然後從該類外部訪問該類中已經'使用該屬性標記'來調用標記的方法,就好像它是一個委託。如何識別和調用帶有屬性標記的方法
例如
public delegate string MethodCall(string args);
和
public class MethodAttribute : System.Attribute
{
public MethodCall callback;
...
}
和
class TypeWithCustomAttributesApplied {
[Method]
public string DelegateMethod(string args) {
...
}
}
然後
void callMethods(string args) {
TypeWithCustomAttributesApplied myObj = new TypeWithCustomAttributesApplied();
DelegateMethod method = MyCustomerHelper.GetMarkedMethod(myObj)
method(args);
}
或也許
void callMethods(string args) {
TypeWithCustomAttributesApplied myObj = new TypeWithCustomAttributesApplied();
MethodAttribute methodAtrib = MyCustomerHelper.GetMarkedMethod(myObj)
methodAtrib.callback(args);
}
我最終試圖實現的是一種自定義屬性,我可以用它來標記任意類中的Ajax入口點,然後用一個Helper類將'Ajax Enabled'控件傳遞給幫助程序,以識別哪個方法在控件中調用,並從客戶端傳遞ajax數據。我對代表人不太瞭解,但我通常瞭解如何應用自定義屬性,但不知道如何「捕捉」我正在'標記'的方法
我大概可以用其他方式管理我的任務,但我正在努力研究屬性,所以我想先讓這個方法工作。
我的最終解決方案:
public void CheckAjax(object anObject, string args)
{
MethodInfo[] methods = anObject.GetType().GetMethods();
foreach (MethodInfo method in methods)
{
object[] attributes = method.GetCustomAttributes(true);
bool containsAttribute = (from attribute in attributes
where attribute is AjaxableAttribute
select attribute).Count() > 0;
if (containsAttribute)
{
string result_method = (string)method.Invoke(anObject, new object[] { args });
Log.Write(string.Format("The Result from the method call was {0} ", result_method));
}
}
}
我用我的解決方案的大部分代碼,感謝您的幫助! – Nnoel
不客氣,很高興我能提供幫助。 –