2010-11-03 22 views
6

Ngay bây giờ, mà không sử dụng bất động sản, tôi đã nhận điều này:Thêm thuộc tính cho C# Sở hữu thiết lập thông số

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

Như bạn thấy, tôi thêm ArrayAttribute thuộc tính đến tham số.

Điều tôi muốn làm là giống nhau nhưng trên trình thiết lập thuộc tính. Điều này không làm việc:

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

Có cách nào gắn các thuộc tính đến tham số set_SetNumbervalue phương pháp?

Ngoài ra, một câu hỏi có liên quan. Hai phương thức được tạo ra (get/set) không có thuộc tính tùy chỉnh. Bất cứ ai có thể giải thích cho tôi tại sao lại như vậy?

Trả lời

7

Bạn cần phải sử dụng paramattribute target trên set:

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

Đối với câu hỏi thứ hai, thuộc tính tùy chỉnh được đặt trên bản thân thuộc tính, không phải trên các phương thức truy cập thuộc tính.

Ngoài ra, nếu ArrayAttribute của bạn chỉ bao giờ áp dụng đối với các thông số, nó có thể được định nghĩa như thế này:

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

+1 chưa bao giờ biết điều đó. – SLaks

+0

Cảm ơn, điều này đã giải quyết được vấn đề của tôi. – tlg

0

Bạn không làm điều đó, tạo một phương pháp giống như bạn đã làm trong ví dụ đầu tiên. Bạn không thể chuyển bất kỳ thứ gì khác ngoài giá trị cho tập hợp.

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

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

BTW, nếu bạn có một tài sản tiếp xúc như trên, bạn có thể sử dụng bộ tư nhân; – CrazyDart

+0

hãy xem liên kết này http://oreilly.com/catalog/progcsharp/chapter/ch18.html – CrazyDart

+0

Thực ra, điều đó có thể hiệu quả. Chỉ cần một chút lưu ý nền, tôi đang tạo ra các phương thức này từ một tệp XML. Thuộc tính là để kiểm tra đơn vị tạo ra một mảng chiều dài thích hợp làm tham số. – tlg

0

Tôi không chắc chắn, nhưng tôi đoán là bạn không thể làm những gì bạn muốn - tham số setter value không được tiếp xúc để bạn có thể áp dụng một thuộc tính để.

Và đối với câu hỏi thứ hai của bạn, thuộc tính khác với phương thức setter & setter. Bạn có thể áp dụng một thuộc tính cho phương thức setter như vậy:

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

Tôi đã thử điều đó, nhưng tôi vẫn nhận được null khi tôi cố gắng gọi GetCustomAttribute (true) trên phiên bản phương thức set của Property (trong cửa sổ Debug Immediate). Dù sao thì tôi nghĩ tôi sẽ từ bỏ ý tưởng này ngay bây giờ. Cảm ơn. – tlg

Các vấn đề liên quan