来自《西夏普入门经典》
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Reflection; namespace ConsoleApplication1 { [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)] public class XXXAttribute : Attribute { public XXXAttribute(System.Type testCase) { TestCase = testCase; } public readonly System.Type TestCase; public void Test() { object o = Activator.CreateInstance(TestCase); } } public class TestAnObject { public TestAnObject() { SomeCodeOrOther scooby = new SomeCodeOrOther(); if (scooby.Do() != 999) throw new Exception("Pesky Kids"); } } [XXX(typeof(TestAnObject))] public class SomeCodeOrOther { public SomeCodeOrOther() { } public int Do() { return 999; } } class Program { static void Main(string[] args) { Assembly A = Assembly.GetExecutingAssembly(); System.Type[] types = A.GetExportedTypes(); foreach (System.Type t in types) { Console.WriteLine("Checking type {0}", t.ToString()); object[] atts = t.GetCustomAttributes(typeof(XXXAttribute), false); if (atts.Length == 1) { Console.WriteLine(" Found XXXAttribute: Running Test"); XXXAttribute tca = atts[0] as XXXAttribute; try { tca.Test(); Console.WriteLine("PASSED"); } catch (System.Exception ex) { Console.WriteLine("FAILED"); Console.WriteLine(ex.Message); } } } Console.Read(); } } }