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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/457908.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457908.shtml
英文地址,請注明出處:http://en.pswp.cn/news/457908.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python安裝opencv出現錯誤_Python3安裝OpenCV出錯,如何解決?

$ sudo pip install opencv-python $ sudo pip install opencv-contrib-python 參考下:python作業畢設:安裝人工智能圖像處理工具OpenCV?zhuanlan.zhihu.compython版本安裝 適合所有平臺: $ sudo pip install opencv-python $ sudo pip inst…

PHP中面向對象的圖片處理類

我們對圖片的處理主要是添加水印和等比縮放&#xff0c;在PHP中&#xff0c;封裝一個類來實現兩個功能。源代碼如下&#xff1a;<?php/***圖片處理*/ class Image {//路徑private $path ./upload/;//隨機文件名private $isRandName;//初始化成員方法public function __con…

ioread32函數有關知識

x86體系和ARM體系的尋址方式是有差別的&#xff1a; 在x86下&#xff0c;為了能夠滿足CPU高速地運行&#xff0c;內存與CPU之間通過北橋相連并通過地址方式訪問&#xff0c;而外設通過南橋與CPU相連并通過端口訪問。 在ARM下也實現了類似的操作&#xff0c;通過兩條不同的總線…

幾何分布的期望和方差公式推導_超幾何分布的數學期望與方差推導

考慮 個外表相同的物品&#xff0c;其中有 個同類物品與另一類的 個物品&#xff1b;抽取 個物品&#xff0c;每個物品的抽取等概率隨機。上述便是一個超幾何分布&#xff08;Hypergeometric Distribution&#xff09;的基本模型。抽取 個 類物品的概率 在研究超幾何分布的數學…

FPGA開發全攻略—— 調試

原文鏈接&#xff1a; FPGA開發全攻略連載之十三&#xff1a;FPGA實戰開發技巧&#xff08;12&#xff09; 5.6 大規模設計的調試經驗 在大規模設計的調試應該按照和設計理念相反的順序&#xff0c;從底層測試&#xff0c;主要依靠ChipScope Pro 工具。下面主要介紹ChipScope P…

003很好的網絡博客(TCP/IP)-很全

http://www.cnblogs.com/obama/p/3292335.html 很全的計算機網絡方面的資料。

linux驅動文件操作簡單介紹

1、設備號 主設備號標識設備對應的驅動程序&#xff0c;次設備號由內核使用&#xff0c;用于確定設備文件所指的設備。 通過次設備號獲得一個指向內核設備的直接指針&#xff0c;也可將此設備號當作設備本地數組的索引。 設備編號用dev_t表示&#xff08;Linux/types.h 32位…

php學習筆記細節部分。

<?phpclass Car{public function Car()//構造函數 {//codeing 當實例化類的時候會調用這里面的方法}public function _destruct()//析構函數 {//codeing 對象的所有引用被刪除&#xff0c;或者對象被顯式的銷毀時會執行的函數。 }} l轉載于:https://www.cnblogs.com/OnlyL…

ctypes python_[python學習之路]ctypes,Python

ctypes 基本用法 ctypes 是一個方便 Python 調用本地已經編譯好的外部庫的模塊。 from ctypes import util, CDLL 標準 C 庫 使用 util 來找到標準 C 庫&#xff1a; libc_name util.find_library(c) # on WINDOWS print libc_name msvcr90.dll 使用 CDLL 來加載 C 庫&#xf…

oracle創建表空間和用戶授權

確定數據文件的存儲地址&#xff0c;有兩種情況&#xff0c;一個是明確存儲地址&#xff0c;一個是跟其他表空間存在一個地方&#xff0c;但是不知道地址&#xff0c;這時候可以根據如下SQL進行查找&#xff1a;select t.* from sys.dba_data_files t where t.tablespace_name…

linux驅動 cdev,inode結構體

前面我們學習了字符設備結構體cdev Linux 字符設備驅動開發 &#xff08;一&#xff09;—— 字符設備驅動結構&#xff08;上&#xff09; 下面繼續學習字符設備另外幾個重要的 數據結構。 先看下面這張圖&#xff0c;這是Linux 中虛擬文件系統、一般的設備文件與設備驅動程…

如何在VS和CB中配置MySQL環境

這里&#xff0c;由于我的MySQL安裝在D盤 MY SQL\MySQL Server 5.6該路徑下&#xff0c;所以后面的路徑均以D:\MY SQL\MySQL Server 5.6開頭 在VS中配置MySQL環境 包含目錄&#xff1a; D:\MY SQL\MySQL Server 5.6\include 庫目錄&#xff1a;D:\MY SQL\MySQL Server 5.…

點乘和叉乘的區別_關于延時和混響的區別與專用延時器與混響器的調控技巧

關于延時和混響的區別與專用延時器與混響器的調控技巧延時器與混響器是模擬室內聲場聲音信號特性的專用設備。在錄音節目制作中&#xff0c;延時器和混響器可以在模擬的藝術聲場中傳遞時間、空間、方位、距離等重要信息&#xff0c;并且可以制作某些特殊效果。延時器與混響器工…

zabbix監控工具

實驗環境網關 classroom 172.25.8.254workstation 172.25.8.9server a-jeth0 172.25.8.10-外網eth1 192.168.0.x內網eth2 192.168.1.x備用servera:webservere:server--------------------------------------------需求&#xff1a;監控設計&#xff1a;原理&#xff1a;硬件&…

linux驅動 自旋鎖

最近在內核頻繁使用了自旋鎖&#xff0c;自旋鎖如果使用不當&#xff0c;極易引起死鎖&#xff0c;在此總結一下。 自旋鎖是一個互斥設備&#xff0c;它只有兩個值&#xff1a;“鎖定”和“解鎖”。它通常實現為某個整數值中的某個位。希望獲得某個特定鎖得代碼測試相關的位。…

百度輸入法

[用戶界面]&#xff1a;界面美觀&#xff0c;有不同畫風的ui界面&#xff0c;適合不同消費群體的需求。 [記住用戶選擇]&#xff1a;會默認記住用戶以往的輸入習慣&#xff0c;只需輸入首拼音字母就會出現過去使用的高頻詞。 [短期刺激]&#xff1a;美化的用戶界面讓人眼前一新…

rs232讀取智能電表_三相電表怎么看度數 怎么計算總電量

現在的三相電表一般都是在屏幕上面直接看&#xff0c;屏幕上面是有文字提示顯示的&#xff0c;三相電表的總度數&#xff0c;上面的文字提醒一般是“正向有功總電量”&#xff0c;三相電表一般屏幕旁邊都會上翻鍵和下翻鍵&#xff0c;可以上下翻開電表里面的數據。如下圖所示&a…

android 學習隨筆十六(廣播 )

1、廣播接收者 BroadcastReceiver接收系統發出的廣播現實中的廣播&#xff1a;電臺為了傳達一些消息&#xff0c;而發送的廣播&#xff0c;通過廣播攜帶要傳達的消息&#xff0c;群眾只要買一個收音機&#xff0c;就可以收到廣播了 Android中的廣播&#xff1a;系統在運行過程中…

驅動面試題總結

1、字符型驅動設備你是怎么創建設備文件的&#xff0c;就是/dev/下面的設備文件&#xff0c;供上層應用程序打開使用的文件&#xff1f; 答&#xff1a;mknod命令結合設備的主設備號和次設備號&#xff0c;可創建一個設備文件。 評&#xff1a;這只是其中一種方式&#xff0…

python程序寫詩_將Python詩歌與D結合起來

在與docker一起使用poetry時&#xff0c;需要記住以下幾點。 安裝 安裝poetry的正式方法是通過&#xff1a;curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python 這種方式允許poetry及其依賴項與依賴項分離。但是&#xff0c;在我看來…