美文网首页
c#中的特性

c#中的特性

作者: 修行猿 | 来源:发表于2016-06-29 20:06 被阅读1265次

    c#中的特性

    特性在我的理解就是在类或者方法或者参数上加上指定的标记,然后实现指定的效果。

    和Java中的注解@Annotation类似。

    c#内置的特性之Obsolete

    [Obsolete("过期了")]
    public static void Test()
    {
         Console.WriteLine("Test");
    }
    
    提示警告.png
    [Obsolete("过期了",true)]
    public static void Test()
    {
         Console.WriteLine("Test");
    }
    
    提示错误.png

    c#内置的特性之Conditional

    使用方法如下

    [Conditional("IsTest")]
    public void Test()
    {
        Console.WriteLine("Test");       
    }
    
    如果没有定义IsTest宏的话,方法变成了灰色.png

    意思是如果定义了宏IsTest则对Test的调用会成功,如果未定义,则该方法的调用不会成功。注意:此时虽然调用不会成功,但是仍然会被编译到程序集中。

    c#内置的特性之CallerFilePath,CallerLineNumber,CallerMemberName

    这三个特性可以获取调用的所在文件,行数,以及方法名称。猛一看没什么用,但是在打log的时候我觉得还是非常有用的。

    static void PrintOut(string message,[CallerFilePath] string fileName="",[CallerLineNumber] int lineNumber=0,[CallerMemberName] string methodName="")
           {
               Console.WriteLine("message:"+message);
                Console.WriteLine("fileName:" + fileName);
                Console.WriteLine("lineNumber:" + lineNumber);
                Console.WriteLine("methodName:" + methodName);
            }
    

    c#内置特性之DebuggerStepThrough,加在方法上

    调试的时候假如那个方法确定无误,加上这个特性,调试的时候可以跳过debug的单步调试

    c#中自定义一个特性以及获取该特性的属性

    定义一个特性

    [AttributeUsage(AttributeTargets.Class)] //特性的应用范围
    public class MyTestAttribute : System.Attribute
    {
        public string Description { get; set; }
        public string VersionNumber { get; set; }
        public int ID { get; set; }
    }
    

    将该特性加在类上,这里的特性会自动把Attribute尾去掉

    [MyTest(Description = "aaa",ID = 1,VersionNumber = "3")]
    public  class Program
    {
      ...
    }
    

    获取特性的属性

    Program p = new Program();
    MyTestAttribute attribute =  (MyTestAttribute)  p.GetType().GetCustomAttribute(typeof (MyTestAttribute)) ;
    Console.WriteLine(attribute.Description);
    

    很多用过spring的道友肯定知道注解在Java中的用法,特性在c#中的用法和在Java中是一样的。有时间我会用c#的特性实现一个简单的spring容器,来实现控制反转。以前用java实现过,但是不知道代码扔到哪里去了。还用java实现过简单的orm。代码也不知道扔到哪里去了!!所以一定要整理代码,整理总结!!!

    相关文章

      网友评论

          本文标题:c#中的特性

          本文链接:https://www.haomeiwen.com/subject/clgndttx.html