博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 特性
阅读量:6676 次
发布时间:2019-06-25

本文共 3879 字,大约阅读时间需要 12 分钟。

Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。

Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。
DebuggerStepThrough:调试时候跳过这个标记的部分

static void Main(string[] args)        {
Person person=new Person(); person.Add(); person.Sum(); person.Test(); ReadKey(); }class Person {
[Obsolete("这个是过期的")] public void Sum() {
WriteLine("Sum"); } [DebuggerStepThrough] public void Add() {
Console.WriteLine("Add"); } [Conditional("Two")] [Conditional("Common")] public void Test() {
#if Common WriteLine("test");#elif Two WriteLine("Twotest");#endif } }

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
02.
#define条件编译
C#中条件编译指令用于按条件包含或排除源文件中的某些部分。在Visual Studio中,会看到被排除的代码显示为灰色。
语法:#define 名称

注意:这里名称取Debug,你也可以取其他名称如Dragon

1 #define Debug

说明:

1、Debug可以看做是声明的一个变量,但此变量没有真正的值,存在时#if Debug结果为true,否则为false;

2、#define单独用没什么意义,一般是和#if或者Conditional特性结合使用;

3、#define必须定义在所有using命名空间前面;

4、Debug与DEBUG是不同的,C#区分大小写。

方式一、使用#if

#define Debugusing System;using static System.Console;namespace Attar4{
class Program {
static void Main(string[] args) {
#if Debug WriteLine("Debug");#else WriteLine("NoDebug");#endif ReadKey(); } }}

在这里插入图片描述

如果注释掉 //#define Debug ,输出结果为:

//#define Debugusing System;using static System.Console;namespace Attar4{
class Program {
static void Main(string[] args) {
#if Debug WriteLine("Debug");#else WriteLine("NoDebug");#endif ReadKey(); } }}

在这里插入图片描述

方式二、使用Conditional特性
们可以将一些函数隔离出来,使得它们只有在定义了某些环境变量或者设置了某个值之后才能发挥作用
使用Conditional特性的隔离策略要比#if/#endif不容易出错。

#define Debug#define Trace#if (Debug&&Trace)#define DebugAndTrace#endifusing System;using System.Diagnostics;using static System.Console;namespace Attar4{
class Program {
static void Main(string[] args) {
Person person=new Person(); person.Print0(); person.Print1(); person.Print2(); person.Print3(); ReadKey(); } } class Person {
[Conditional("DEBUG")] public void Print0() {
WriteLine("DEBUG is defined"); } [Conditional("Debug")] public void Print1() {
WriteLine("Debug is defined"); } //定义了Debug或者Trace后才会执行此方法 [Conditional("Debug"),Conditional("Trace")] public void Print2() {
WriteLine("Debug or Trace is defined"); } //只有定义了Debug和Trace后才会执行此方法 [Conditional("DebugAndTrace")] public void Print3() {
WriteLine("Debug and Trace is defined"); } }}

在这里插入图片描述

03.
自定义Attribute
自定义的Attribute必须直接或者间接地从Attribute这个类派生

using System;using static System.Console;namespace Attar5{
class Program {
static void Main(string[] args) {
Type type=typeof(People); object[] objects=type.GetCustomAttributes(typeof(HelpAttribute),false); WriteLine(((HelpAttribute)objects[0]).Des); ReadKey(); } } //ValidOn: 读取或者设置这个属性,指明Attribute 可以被施加的元素的类型。 //AllowMultiple: 读取或者设置这个属性,表示是否可以对一个程序元素施加多个Attribute 。 //Inherited:读取或者设置这个属性,表示是否施加的Attribute 可以被派生类继承或者重载。 [AttributeUsage(AttributeTargets.Class|AttributeTargets.Struct,AllowMultiple = false,Inherited = false)] class HelpAttribute:Attribute {
private string _des; public string Des {
get => _des; set => _des = value; } public HelpAttribute(string Des) {
this.Des = Des; } } [Help("这是一个描述")] class People {
public void Print() {
} } class Student:People {
}}

在这里插入图片描述

转载地址:http://turxo.baihongyu.com/

你可能感兴趣的文章
布隆过滤器:实现代码
查看>>
使用Spring MVC开发RESTful API
查看>>
js复制input到剪切板(ie内核浏览器)单个input简洁版
查看>>
mysql.sock丢失解决
查看>>
BISO
查看>>
好程序员分享http的keep-alive和tcp的keep-alive区别
查看>>
tomcat调优方案
查看>>
Cisco2950 2960 交换机基本配置命令
查看>>
IE打印控件
查看>>
Java简单实现固定长度队列
查看>>
jenkins学习
查看>>
Oracle中两表关联更新
查看>>
定制 Kali Linux Live USB 的另一种方法
查看>>
OpenCV在ubuntu下的编译
查看>>
解决@Override错误
查看>>
Android插入物理键盘的同时显示软键盘
查看>>
tmux使用
查看>>
简单的spring-data集成mongoDB项目,实现crud的功能
查看>>
kernel和iptables补丁创建和安装
查看>>
mongodb 备份和还原
查看>>