2010-11-03 19 views
6

set, ben hallederim:ekleme Nitelikler özelliklerini kullanmadan, şu anda parametre

Gördüğünüz gibi, ben parametreye ArrayAttribute niteliğini ekliyorum
public void SetNumber([Array(new int[]{8})] Byte[] number) 

.

Yapmak istediğim şey aynı ancak bir özellik kümesinde. Bu işe yaramazsa: set_SetNumbervalue yöntem parametresine niteliği takılarak herhangi bir yolu

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

var mı? Ayrıca, ilgili bir soru. Oluşturulan iki yöntem (get/set) özel niteliğe sahip değil. Birisi bana neden olduğunu açıklayabilir mi?

cevap

7

Sen set üzerinde paramattribute target kullanmak gerekir Mülkün kendisi, mülkiyet erişim yöntemleri üzerinde değil. sizin ArrayAttribute sadece hiç parametreleri için geçerli olup olmadığını

Ayrıca, gibi tanımlanabilir:

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

+1 bunu hiç bilmiyordu. – SLaks

+0

Teşekkürler, bu benim problemimi çözdü. – tlg

0

Bunu yapmıyorsunuz, ilk örnekte yaptığınız gibi bir yöntem oluşturun. Set değerinden başka bir şey iletemezsiniz.

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

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

BTW, yukarıdaki gibi açıktaki özelliği varsa, özel bir set kullanabilirsiniz; – CrazyDart

+0

bu bağlantıya göz atın http://oreilly.com/catalog/progcsharp/chapter/ch18.html – CrazyDart

+0

Aslında bu işe yarayabilir. Sadece biraz arka plan notu, bu yöntemleri bir XML dosyasından oluşturuyorum. Özellik, birim testi için parametre olarak uygun bir uzunluk dizisi üretmektir. – tlg

0

Emin değilim, ama benim tahminim istediğini yapamaz ki - bir öznitelik uygulamak için ayarlayıcı value parametre maruz kalmaz.

Ve ikinci sorunuz için, bir özellik geter & ayarlayıcı yöntemlerinden farklıdır. Öyle gibi kurucu metod için bir öznitelik uygulayabilirsiniz: İkinci soruya gelince

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

, özel özellik ayarlanır:

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

Bunu denedim, ancak özellik (set Debug Immediate penceresinde) Sürüm yönteminde GetCustomAttribute (true) çağırmaya çalıştığınızda hala boş alırım. Her neyse, şu an için fikrimi bırakacağımı düşünüyorum. Teşekkürler. – tlg