C# 屬性

2018-01-22 17:09 更新

C# 屬性

屬性可以向代碼元素添加自定義信息。

例如,我們可以使用屬性標(biāo)記一個(gè)類已被棄用。

我們還可以標(biāo)記一個(gè)接口是一個(gè)web服務(wù)的web接口。

屬性類

屬性由繼承自抽象類System.Attribute的類定義。

要將屬性附加到代碼元素,請(qǐng)?jiān)诖a元素前面的方括號(hào)中指定屬性的類型名稱。

例如,以下代碼將 ObsoleteAttribute 附加到Main類:


[ObsoleteAttribute]
public class Main {
   ...
}

此屬性由編譯器識(shí)別,并且如果引用了標(biāo)記為過(guò)時(shí)的類型或成員,將導(dǎo)致編譯器警告。

按照慣例,所有屬性類型都以 Attribute 結(jié)束。

C#允許您在附加屬性時(shí)省略后綴:


[Obsolete]
public class Main {
   ...
}

ObsoleteAttribute 是在 System 命名空間中聲明的類型,如下所示:


public sealed class ObsoleteAttribute : Attribute {...}

C#語(yǔ)言和.NET Framework包括多個(gè)預(yù)定義屬性。


命名和位置屬性參數(shù)

屬性可以具有參數(shù)。

在下面的示例中,我們將 XmlElementAttribute 應(yīng)用于類。

此屬性告訴XMLserializer對(duì)象在XML中的表示方式并接受幾個(gè)屬性參數(shù)。

以下屬性將CustomerEntity類映射到XML元素名為Customer,屬于http://hgci.cn命名空間:


[XmlElement ("Customer", Namespace="http://hgci.cn")]
public class Customer { 
   ... 
}

屬性參數(shù)屬于兩種類型之一:位置或命名。

在里面前面的例子中,第一個(gè)參數(shù)是位置參數(shù); 第二個(gè)是命名參數(shù)。

位置參數(shù)對(duì)應(yīng)于屬性的參數(shù)類型的公共構(gòu)造函數(shù)。

命名參數(shù)對(duì)應(yīng)于公共字段或公共屬性的屬性類型。

當(dāng)指定屬性時(shí),我們必須包括對(duì)應(yīng)的位置參數(shù)到一個(gè)屬性的構(gòu)造函數(shù)。

命名參數(shù)是可選的。



屬性目標(biāo)

下面是使用 CLSCompliant 屬性指定CLS合規(guī)性的示例對(duì)于整個(gè)裝配:


[assembly:CLSCompliant(true)]

指定多個(gè)屬性

可以為單個(gè)代碼元素指定多個(gè)屬性。

每個(gè)屬性都可以列在同一對(duì)方括號(hào)內(nèi),用逗號(hào)分隔單獨(dú)的方括號(hào)對(duì)。

以下三個(gè)示例在語(yǔ)義上是相同的:


[Serializable, Obsolete, CLSCompliant(false)]
public class Main {...}

[Serializable] [Obsolete] [CLSCompliant(false)]
public class Main {...}

[Serializable, Obsolete]
[CLSCompliant(false)]
public class Main {...}

來(lái)電信息屬性

我們可以用三個(gè)調(diào)用者信息之一來(lái)標(biāo)記可選參數(shù)屬性。 它們告訴編譯器饋送從調(diào)用者獲得的信息源代碼插入?yún)?shù)“s默認(rèn)值:

  • [CallerMemberName] applies the caller"s member name
  • [CallerFilePath] applies the path to caller"s source code file
  • [CallerLineNumber] applies the line number in caller"s source code file

以下程序中的OneMethod方法演示了所有三個(gè):


using System;/*from  w ww  .  j a  va 2s  .c  om*/
using System.Runtime.CompilerServices;

class Main {
    static void Main(){
        OneMethod();
    }
    static void OneMethod (
        [CallerMemberName] string memberName = null,
        [CallerFilePath] string filePath = null,
        [CallerLineNumber] int lineNumber = 0){
        
            Console.WriteLine (memberName);
            Console.WriteLine (filePath);
            Console.WriteLine (lineNumber);
    }
}

假設(shè)我們的程序駐留在c:\\ source \\ test \\ Program.cs中,輸出將是:


Main
c:\source\test\Program.cs
11
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)