C 高階教程 特性

2021-09-11 13:57:34 字數 4011 閱讀 6827

特性(attribute)是用於在執行時傳遞程式中各種元素(比如類、方法、結構、列舉、元件等)的行為資訊的宣告性標籤。您可以通過使用特性向程式新增宣告性資訊。乙個宣告性標籤是通過放置在它所應用的元素前面的方括號([ ])來描述的。

特性(attribute)用於新增元資料,如編譯器指令和注釋、描述、方法、類等其他資訊。.net 框架提供了兩種型別的特性:預定義特性和自定義特性。

規定特性(attribute)的語法如下:

[attribute(positional_parameters, name_parameter = value, ...)]

element

特性(attribute)的名稱和值是在方括號內規定的,放置在它所應用的元素之前。positional_parameters 規定必需的資訊,name_parameter 規定可選的資訊。

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

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

規定該特性的語法如下:

[attributeusage(

validon,

allowmultiple=allowmultiple,

inherited=inherited

)]

其中:

例如:

[attributeusage(attributetargets.class |

attributetargets.constructor |

attributetargets.field |

attributetargets.method |

attributetargets.property,

allowmultiple = true)]

這個預定義特性標記了乙個條件方法,其執行依賴於指定的預處理識別符號。

它會引起方法呼叫的條件編譯,取決於指定的值,比如debugtrace。例如,當除錯**時顯示變數的值。

規定該特性的語法如下:

[conditional(

conditionalsymbol

)]

例如:

[conditional("debug")]
下面的例項演示了該特性:

#define debug

using system;

using system.diagnostics;

public class myclass

}class test

static void function2()

public static void main()

}

當上面的**被編譯和執行時,它會產生下列結果:

in main function

in function 1

in function 2

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

規定該特性的語法如下:

[obsolete(

message

)][obsolete(

message,

iserror

)]

其中:

下面的例項演示了該特性:

using system;

public class myclass

static void newmethod()

public static void main()

}

當您嘗試編譯該程式時,編譯器會給出乙個錯誤訊息說明:

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

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

最後乙個步驟包含編寫乙個簡單的程式來讀取元資料以便查詢各種符號。元資料是用於描述其他資料的資料和資訊。該程式應使用反射來在執行時訪問特性。我們將在下一章詳細討論這點。

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

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

[attributeusage(attributetargets.class |

attributetargets.constructor |

attributetargets.field |

attributetargets.method |

attributetargets.property,

allowmultiple = true)]

public class debuginfo : system.attribute

在上面的**中,我們已經宣告了乙個名為 debuginfo 的自定義特性。

讓我們構建乙個名為 debuginfo 的自定義特性,該特性將儲存除錯程式獲得的資訊。它儲存下面的資訊:

我們的 debuginfo 類將帶有三個用於儲存前三個資訊的私有屬性(property)和乙個用於儲存訊息的公有屬性(property)。所以 bug 編號、開發人員名字和審查日期將是 debuginfo 類的必需的定位( positional)引數,訊息將是乙個可選的命名(named)引數。

每個特性必須至少有乙個建構函式。必需的定位( positional)引數應通過建構函式傳遞。下面的**演示了 debuginfo 類:

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

[attributeusage(attributetargets.class |

attributetargets.constructor |

attributetargets.field |

attributetargets.method |

attributetargets.property,

allowmultiple = true)]

public class debuginfo : system.attribute

public int bugno

}public string developer

}public string lastreview

}public string message

set}}

通過把特性放置在緊接著它的目標之前,來應用該特性:

[debuginfo(45, "zara ali", "12/8/2012", message = "return type mismatch")]

[debuginfo(49, "nuha ali", "10/10/2012", message = "unused variable")]

class rectangle

[debuginfo(55, "zara ali", "19/10/2012",

message = "return type mismatch")]

public double getarea()

[debuginfo(56, "zara ali", "19/10/2012")]

public void display()

", length);

console.writeline("width: ", width);

console.writeline("area: ", getarea());

}}

C 高階特性

msad的解釋.netframework是為其執行的應用程式提供各種服務的託管執行環境 主要元件公共語言執行時 clr 和.net framework.託管 和非託管 託管 就是visual baseic net和c 編譯器編譯出來的 託管 在公共語言執行庫 clr 中執行 非託管 是執行在公共語言...

C 高階特性

其實c 的高階特性,我覺得不能叫做高階特性 我覺得吧,c 的基本語法如果是必須要掌握的話 那麼這個所謂的高階特性其實也就是所謂的 c 這門語言的特色之處,它和其他語言的區別所在的地方 不能叫做高階特性,按照我的想法,這個才應該算是真正的c 語言 之前的那些只能是程式設計基礎而已 一開始就被這個 高階...

c 之高階特性

一.c 委託 概念 委託是一種引用型別,表示對方法的引用,這個方法是具有特定返回值型別和引數的方法。方式一 通過委託例項呼叫方法 方式二 使用委託把方法作為引數傳遞給其它方法。委託 方式一 的使用步驟 1.宣告委託 語法 delegate 返回值型別 委託名 引數列表 delegate string...