菜鳥教程C 高階教程

2021-08-17 09:37:21 字數 2959 閱讀 8335

c#特性(attribute)

.net框架提供了三種預定義特性:attributeusageconditional、obsolete

預定義特性attributeusage:預定義特性attributeusage描述了如何使用乙個自定義特性類,它規定了特性可應用到的專案的型別。

[attributeusage(

validon,

allowmultiple=allowmultiple,

inherited=inherited)}

conditional

這個預定義特性標記了乙個條件方法,其執行依賴於指定的預處理識別符號它會引起方法呼叫的條件編譯,取決於指定的值,比如debug或trace.例如,當除錯**時顯示變數的值。

規定該特性的語法如下:

[

conditional

(conditionalsymbol

)]例如:

[conditional

("debug"

)]

obsolete

這個預定義特性標記了不應被使用的程式實體。它可以讓您通知編譯器丟棄某個特定的目標元素。例如,當乙個新方法被用在乙個類中,但是您仍然想要保持類中的舊方法,您可以通過顯示乙個應該使用新方法,而不是舊方法的訊息,來把它標記為 obsolete(過時的)。

[obsolete(

message

)][obsolete(

message,

iserror

)]

引數message,是乙個字串,描述專案為什麼過時的原因以及該替代是用什麼。

引數iserror,是乙個布林值。如果該值為true,編譯器應把該項目的使用當做乙個錯誤,預設值的false(編譯器生成乙個警告)。

建立自定義特性(attribute)

.net框架允許建立自定義特性,用於儲存宣告性資訊,且可在執行時被檢索,該資訊根據設計標準和程式需要,可與任何目標元素相關。

建立並使用自定義特性包含四個步驟

宣告自定義特性。構建自定義特性、在目標程式元素上應用自定義特性、通過反射訪問自定義特性。

宣告自定義特性:

乙個新的自定義特性應派生自system.attribute類。例如:

// 乙個自定義特性 bugfix 被賦給類及其成員

[attributeusage(attributetargets.class |

attributetargets.constructor |

attributetargets.field |

attributetargets.method |

attributetargets.property,

allowmultiple = true)]

public class debuginfo : system.attribute

構建自定義

// 乙個自定義特性 bugfix 被賦給類及其成員

[attributeusage

(attributetargets

.class

|attributetargets

.constructor

|attributetargets

.field

|attributetargets

.method

|attributetargets

.property

,allowmultiple

=true

)]public

class

debuginfo

:system

.attribute

public

intbugno

}public

string

developer

}public

string

lastreview

}public

string

message

set}

}

c#中利用conditional定義條件方法

利用conditional屬性,程式設計師可以定義條件方法。conditional屬性通過測試條件編譯符號來確定適用的條件。當執行到乙個條件方法呼叫時,是否執行該呼叫,要根據出現該呼叫時是否已定義了此符號來確定。如果定義了此符號,則執行該呼叫;否則省略該呼叫(包括對呼叫的引數的計算)。使用conditional是封閉#if和#endif內部方法的替代方法,它更整潔、更別緻、減少了出錯的機會。

條件方法要受到以下限制:

條件方法必須是類宣告或結構宣告中的方法。如果在介面宣告中的方法指定conditional屬性,將出現編譯時錯誤。

條件方法必須具有返回型別。

不能用override修飾符標記條件方法。但是可以用virtual修飾符標記條件方法。此類方法的重寫方法隱含為有條件的方法,而且不能用conditional屬性顯式標記。

條件方法不能是介面方法的實現。否則將發生編譯時錯誤。

如果條件方法用在委託建立表示式中,也會發生編譯時錯誤。

這裡需要注意的是:如果建立乙個沒有定義任何條件的方法,那麼預設只要呼叫就總是會執行此方法,如果你想通過條件判斷來執行,那麼該方法上必須至少包含乙個conditional特性所包含的條件,他才會響應你定義的條件。

c 菜鳥教程

菜鳥教程中的c 1.c 類訪問修飾符 public,private 只有類和友元函式可以訪問 protected 保護成員變數與私有成員十分相似,不同的是保護成員可以在派生類中訪問 在類裡不寫訪問修飾符,預設是private,但是結構體的預設是public 2.虛繼承 需要理解原理 是解決c 多重繼...

C 菜鳥教程

菜鳥教程c 全域性變數和和區域性變數同名時,可通過網域名稱在函式中引用到全域性變數,不加網域名稱解析則引用區域性變數 include using namespace std int a 10 intmain lambda 函式與表示式 c 11 提供了對匿名函式的支援,稱為 lambda 函式 也叫...

菜鳥教程C 高階教程部分理解(一)委託與事件

委託 delegate 所有的委託 delegate 都派生自 system.delegate 類。定義乙個委託,該委託可用於引用帶有完全相同引數和返回型別的方法。事件 event 第乙個地方 事件發布 可以在乙個類中通過委託規定有乙個函式,它的函式名 引數 返回值都定好了,但沒有實現。基於上面的委...