返回值的自定义属性

本文关键字:自定义属性 返回值 | 更新日期: 2023-09-27 18:36:59

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

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. 是 (new Model()) ^^) 的缩写)

返回值的自定义属性

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

我在MSDN上查了一下,他们对它的用途非常模糊。但是在 MSDN 论坛上,我在返回值上发现了这个属性,从其中一个答案中我们得到了:

在这种情况下,"return"属性描述了有关属性返回的所有内容。 它不是在描述任何单一的回报,而是描述所有这些回报的特征。

- 瑞安/卡达克斯

所以我相信[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从非托管环境正确操作返回值。