2016-03-01 138 views
1

我目前正在使用Attribute類。 我想在我的類的返回類型上使用屬性,但不幸的是我的屬性不適用。我錯過了什麼嗎?返回值的自定義屬性

public class Model 
{ 
    [return: Mandatory] 
    public int Integer 
    { 
     [return: Mandatory] 
     get { return 2; } 
    } 

    [Mandatory] 
    public TimeSpan Time => TimeSpan.FromHours(2); 

    [return: Mandatory] 
    public Model2 GetModel2 => new Model2(); 

    [return: Mandatory] 
    public Model2 Test() 
    { 
     return new Model2(); 
    } 
} 

,如果我檢查例如Model.Test()的GetType()我看到沒有自定義屬性,有什麼能即時顯然缺少的一部分? :( (型號是(新模型())^^的縮寫)

回答

0

new Model().Test()將返回Model2的對象,在其上運行GetType()。而且Model2沒有[MandatoryAttribute]就可以了,對不對?所以,鍵入Model2信息不返回有關這方面的消息。

我看着它在MSDN和他們關於什麼是它很模糊,但在MSDN論壇,我發現這個Attributes on return values,並從一個我們得到的答案:

In在這種情況下,「return」屬性描述了屬性返回的所有內容。它沒有描述任何單一的回報,而是所有這些特徵。

-Ryan/Kardax

所以我相信[return: Attribute]差不多是方法和信息是什麼,可以返還,而不是分配給返回的對象的屬性。

一個例子來自MSDN

[Guid("12345678-1234-1234-1234-123456789abc"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
interface ISampleInterface 
{ 
    [DispId(17)] // set the DISPID of the method 
    [return: MarshalAs(UnmanagedType.Interface)] // set the marshaling on the return type 
    object DoWork(); 
} 

所以這裏的運行時使用此MarshallAsAttribute正確的返回值進行操作,從非託管環境。