C#学习笔记之四(Attribute, Reflection, Thread, Thread Synchronization)

类别:.NET开发 点击:0 评论:0 推荐:

 //can add metadata in program, It store with the program
 //using ILDasm to check atributes
 [CodeReviewAttribute("08/08/2005", "Allan Zhang",
  Comment = "That is a Attribute test")]
 class Employee {}

 //define target and atr
 [AttributeUsage(AttributeTargets.Class |
   AttributeTargets.Constructor |
   AttributeTargets.Interface |
   AttributeTargets.Method |
   AttributeTargets.Field |
 class CodeReviewAtrribute : System.Attribute
  private string reviewDate;
  private string reviewerName;
  private string reviewComments;
Reflections: //look the metadata in program, discory, late binding
 //Display attribute in Code
 System.Reflection.MemberInfo inf = typeof(Employee);
 object[] atributes = inf.GetCustomAttributes(false);
 foreach (object attribute in attributes)
  CodeReviewAttribute attr = (CodeReviewAttribute) attribute;
  Console.WriteLine("This is code was reviewed on {0} by {1} \n Comments {2}",
    attr.comment )
 Assembly asm = Assembly.Load("Mscorlib.dll");
 Type[] types = asm.GetTypes();
 foreach(Type type in types)
  Console.WriteLine("Type is{0}, type);
  Console.WriteLine("\n{0} types found." types.Length);
 Type mathType =Type.GetType("System.Math");
 object obj = Activator.CreaterInstance(mathType);
 Type[] parameterTypes = new Type[2];
 parameterTypes[0] = Type.GetType("System.Double");
 parameterTypes[1] = Type.GetType("System.Double");
 MethodInfo powInfo = mathType.GetMethod("Pow", parameterTypes);
 object[] parameters = new object[2];
 parameters[0] = 5;
 parameters[1] = 3;
 object returnValue = powInfo.Invoke(obj, parameters);
 Console.WriteLine("5 to the 3rd power is {0}, returnValue);

 //Create Implicit Threads
 using System.Threading
 Thread threadOne = new Thread(new ThreadStart(Countup));
 Thread threadTwo = new Thread(new ThreadStart(Countup));
 threadOne.Name = "Thread One";
 threadTwo.Name = "Thread two";
 //Joining & killing Threads
 //join two threads in current threa
  //this will print, after two above two threads ends
  Console.WriteLine("The other threads done");  

 //1. no conflict between threads
 interlocked.Increment(ref synchValue);
 //2. lock method, this will block other thread when it enter into it
  int temp = synchValue;
  synchValue = temp;
  synchValue = temp;
  Console.WriteLine("{0} Count up: {1}",