2016-03-01 97 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正确的返回值进行操作,从非托管环境。