我目前正在使用属性类。 我试图在我班级的返回类型上使用属性,但不幸的是我的属性没有被应用。我错过了什么吗?
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())^^)
的缩写答案 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
从非托管环境中正确操作返回值。