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

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

Atributes:
 //can add metadata in program, It store with the program
 //using ILDasm to check atributes
  
 //usage
 [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 |
   AttributeTargets.Property,
   AllowMultiple=true)]
 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.date,
    attr.name,
    attr.comment )
 } 
 
 //Discovery
 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);
 }
 
 //LateBinding
 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);

Thread:
 //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";
 threadOne.Start();
 threadTwo.Start();
 
 //Joining & killing Threads
 //join two threads in current threa
 threadOne.start();
  threadTwo.Start();
  threadOne.Join();
  threadTwo.Join();
  //this will print, after two above two threads ends
  Console.WriteLine("The other threads done");  
 //sleep(millisenconds)
 threadOne.sleep(1);
 threadOne.Abort();

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

本文地址:http://com.8s8s.com/it/it45099.htm