日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 使用Conditional特性而不是#if条件编译

發布時間:2023/12/18 C# 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 使用Conditional特性而不是#if条件编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 概述

    #if/#endif 語句常用來基于同一份源碼生成不同的編譯結果,其中最常見的就是debug版和release版。但是這些工具在實際應用中并不是非常友好,因為它們容易被濫用,其代碼頁進而難以理解或調試。C#設計中考慮到這個問題,并提供了更好的工具——Conditional特性,用來為不同的環境編譯不同的機器碼。Conditional特性適用于方法的層面,這將強制我們將條件代碼拆分為獨立的方法。在需要編寫條件代碼時,我們應該使用Conditional特性來替代#if/#endif。

? ? ? 功能描述

使用#if/#endif 語句的缺點

  例如編寫一個私有方法來獲取調用它的函數名稱:

private string CheckMethod(){#if DEBUGTrace.WriteLine("Entering CheckState for Person");string methodName = new StackTrace().GetFrame(1).GetMethod().Name;return methodName; #endifreturn null;}

更好的解決辦法——使用Conditional特性

  為了避免出現上面的問題我們可以使用Conditional特性。使用Conditional特性即可將一些函數拆分出來,讓其只有在定義了某些環境變量或者設置了某個值之后才能編譯并成為類的一部分。Conditional特性最常用的地方就是講一段代碼變成調試語句。使用Conditional特性的隔離策略要比#if/#endif不容易出錯。

看下面的代碼:

[Conditional("DEBUG")]private void CheckMethod(){Trace.WriteLine("Entering CheckState for Person");string methodName = new StackTrace().GetFrame(1).GetMethod().Name;}

Conditional特性的限制

Conditional特性只可以應用在整個方法上。

任何使用了Conditional特性的方法都只能返回void類型。

? ? ? 功能擴展

我們可以配置解決方案文件,來決定編譯時候運行的代碼,流程如下:

1、配置解決方案信息:

?

2、編寫代碼約束:

    [Conditional("IN_MEMORY")]private static void ConfigureInMemory(){................................................ }[Conditional("NHIBERNATE")]private static void ConfigureInMemory(){
      ................................................      }

?

代碼生成的時候,我們就可以根據Conditional來決定編譯走的流程;

?

轉載于:https://www.cnblogs.com/xibei666/p/5495561.html

總結

以上是生活随笔為你收集整理的C# 使用Conditional特性而不是#if条件编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。