2010-11-03 50 views
6

眼下,不使用性質的,我有這樣的:添加屬性到C#屬性設置參數

public void SetNumber([Array(new int[]{8})] Byte[] number) 

正如你所看到的,我加入ArrayAttribute屬性參數。

我想要做的是相同的,但在屬性setter上。這不起作用:

[Array(new int[]{8})] 
public Byte[] SetNumber 
{ 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 

有屬性附加到set_SetNumbervalue方法參數的方法嗎?

此外,一個相關的問題。生成的兩個方法(get/set)沒有自定義屬性。任何人都可以向我解釋爲什麼?

回答

7

您需要使用paramattribute targetset

public Byte[] SetNumber { 
    [param: Array(new int[] { 8 })] 
    set { 
    } 
    get { 
    return null; 
    } 
} 

至於第二個問題,自定義屬性被設置在屬性本身,而不是屬性訪問器方法。

另外,如果您的ArrayAttribute永遠只能適用於參數,它可以被定義如下:

[AttributeUsage(AttributeTargets.Parameter)] 
public class ArrayAttribute : Attribute { 
    // ... 
} 
+2

+1從來不知道。 – SLaks 2010-11-03 19:40:38

+0

謝謝,這解決了我的問題。 – tlg 2010-11-03 20:45:39

0

你不這樣做,就像你在第一個例子中所做的那樣創建一個方法。你不能通過除了價值以外的任何東西。

public Byte[] TheNumber 
{ 
    private set; 
    get 
    { 
     return null; 
    } 
} 

public void SetNumber([Array(new int[] { 8 })] Byte[] number) 
{ 
    this.TheNumber = number; 
} 
+0

順便說一句,如果你有一個公開的屬性像上面,你就可以使用私有組; – CrazyDart 2010-11-03 19:15:28

+0

看看這個鏈接http://oreilly.com/catalog/progcsharp/chapter/ch18.html – CrazyDart 2010-11-03 19:27:50

+0

其實,這可能工作。僅僅是一些背景說明,我從XML文件生成這些方法。該屬性用於單元測試生成一個適當長度的數組作爲參數。 – tlg 2010-11-03 19:31:54

0

我不能肯定,但我的猜測是,你想要什麼,你不能做 - 二傳手value參數不能暴露你申請的屬性。

至於你的第二個問題,一個屬性不同於它的getter & setter方法。您可以將一個屬性setter方法如下所示:

public Byte[] SetNumber 
{ 
    [Array(new int[]{8})] 
    set 
    { 
    } 
    get 
    { 
    return null; 
    } 
} 
+0

我試過了,但當我嘗試在屬性的設置方法版本(在調試立即窗口中)調用GetCustomAttribute(true)時,我仍然得到空值。無論如何,我想我現在會放棄這個想法。謝謝。 – tlg 2010-11-03 19:29:58