C#学习笔记(Attribute, Reflection, Thread, Thread Synchronization) | |
//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); } |
C#学习笔记
最新推荐文章于 2024-09-04 10:30:12 发布