本文分享一些代码使用Attribute的高级写法部分,日常使用中应该很少用到。
这些东西其实和xml解析时定义的class中做的标记、自定义配置文件的class标记、枚举中文标记等等是类似的。都是在上面“[]”+标记。
日常编码中,应该Enum的中文标记是使用最多的,接下来就是xml解析(但是现在绝大部分使用json就行,比xml简单好用很多),自定义配置文件应该用的人比较少,毕竟实用性不大,直接定义字段,或者使用系统自带的要容易用一些。接下来分享的几个,应该极少人会使用。
一.Obsolete
类似tooltip提示,一般写接口的人会用到,用于标记函数是否过时,以及强制让函数无法通过编译。
截图中的三个方法是一样的,调用输出信息。照理说,是能直接调用然后输出的,毕竟没有语法错误,编译器也没提示函数有问题。
但实际使用时是:一个警告,一个直接错误
直接给你一个error,不让编译通过。
查看定义,该属性是继承Attribute,这样用法就是直接标在函数或者成员上面,并用“[]”包起来。该特性有三种构造函数,第二种常用,就是让函数提示过时,同时里面有message提示信息。用法就是上面第一张图那样,让函数本身“过时”,给了一个警告提,同时鼠标移上去时,会提示message的信息。第三种构造函数,就是加了error,标记是现实成“警告”(可以编译通过),还是“错误”(无法编译通过)。
这个特性,一般写接口的人会使用到,在接口的版本更新后,如果替换了新接口,但是又想老程序能使用时,一般保留老接口的代码。不过这里就有问题了,接下来新使用的程序,应该让他们用新接口而不是用老接口:如果说写在文档里面说明这个情况,但是好多人是连接口文档都不看的,直接dll引用就开始写代码的;如果写在注释里面?那更加不行,一般没报错,是很少有人去看注释的。所以这时候就得用特性了,使用这个特性,写代码的时候就直接编译器提示了,使用者全部都会看到这个提示。(unity经常用这个特性提示每次更新版本后丢弃的老属性,不过现在国内绝大部分公司,都是直接删掉老函数,然后拉分支来处理的,这样导致后期一大堆分支,维护很麻烦)
二.Conditional
一个好玩的特性,类似于 #if XXXX #elif XXXX #else XXX #endif 这种使用:
使用方式如下:
调用时:发现明明代码写在那里,但是却不执行
因为它的使用前提是你要提示它“要执行”,它才会执行,不然没提示,代码在,但是不执行。
怎么提示:
方法一:在开头写#define +构造函数中传递的字符串