zoukankan      html  css  js  c++  java
  • c#中的特性

    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。代码也不知道扔到哪里去了!!所以一定要整理代码,整理总结!!!



    作者:六道真君
    链接:http://www.jianshu.com/p/93d0b99b52ac
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    linux安装java环境
    前端JS-websocket与后端通信
    windows安装NodeJS/修改全局路径/配置镜像站
    vue基础---13vue-router
    uni-app项目
    vue基础---12脚手架
    vue基础---11组件
    vue基础---10生命周期
    vue基础---09表单输入绑定
    vue基础---08事件
  • 原文地址:https://www.cnblogs.com/kanekiken/p/8004285.html
Copyright © 2011-2022 走看看