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

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);
 }  

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

bugfree

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值