[AttributeUsage (AttributeTargets.All)]
public class MineAttribute : Attribute {
- string name;
+ public string name;
public MineAttribute (string s)
{
}
}
- interface A {
- [Mine ("hello")]
- void Hello ();
+ [AttributeUsage (AttributeTargets.ReturnValue)]
+ public class ReturnAttribute : Attribute {
+
+ public string name;
+
+ public ReturnAttribute (string s)
+ {
+ name = s;
+ }
+ }
+
+ public interface TestInterface {
+ void Hello ([Mine ("param")] int i);
}
public class Foo {
int i;
- [Mine ("Foo")]
+ [Mine ("Foo")]
+ [return: Return ("Bar")]
public static int Main ()
{
+ Type t = typeof (Foo);
+ foreach (MemberInfo m in t.GetMembers ()){
+ if (m.Name == "Main"){
+ MethodInfo mb = (MethodInfo) m;
+
+ ICustomAttributeProvider p = mb.ReturnTypeCustomAttributes;
+ object [] ret_attrs = p.GetCustomAttributes (false);
+
+ if (ret_attrs.Length != 1){
+ Console.WriteLine ("Got more than one return attribute");
+ return 1;
+ }
+ if (!(ret_attrs [0] is ReturnAttribute)){
+ Console.WriteLine ("Dit not get a MineAttribute");
+ return 2;
+ }
+
+ ReturnAttribute ma = (ReturnAttribute) ret_attrs [0];
+ if (ma.name != "Bar"){
+ Console.WriteLine ("The return attribute is not Bar");
+ return 2;
+ }
+ }
+ }
+
+ Type ifType = typeof (TestInterface);
+
+ MethodInfo method = ifType.GetMethod ("Hello",
+ BindingFlags.Public | BindingFlags.Instance);
+
+ ParameterInfo[] parameters = method.GetParameters();
+ ParameterInfo param = parameters [0];
+
+ object[] testAttrs = param.GetCustomAttributes (true);
+
+ if (testAttrs.Length != 1)
+ return 1;
+
return 0;
}
}