返回值的自定义属性

时间:2016-03-01 19:19:02

标签: c# attributes return

我目前正在使用属性类。 我试图在我班级的返回类型上使用属性,但不幸的是我的属性没有被应用。我错过了什么吗?

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()我没有看到自定义属性......我显然缺少什么部分? :( (Model。是(new Model())^^)

的缩写

1 个答案:

答案 0 :(得分:0)

new Model().Test()将返回Model2的对象,您运行GetType()Model2上没有[MandatoryAttribute],对吗?因此Model2上的类型信息不会返回任何有关此内容的信息。

我在MSDN上查了一下,他们对它的含义非常模糊。但在MSDN论坛上,我发现了这个Attributes on return values,并从我们得到的答案之一:

  

在这种情况下,“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从非托管环境中正确操作返回值。