c#使用return属性做什么?
这里的方法c#使用return属性做什么?,c#,C#,这里的方法call(),只返回Test1对象,但是用classTest2(g=5)设置返回属性的目的是什么 什么事情应该改变或发生?但什么都没发生……有人能解释发生了什么吗 它对Test2对象有何影响?对象应该在哪里?它只是一个属性,就像其他属性一样——属性的使用取决于决定使用它的人。查看return的属性相对较少,但这是完全合法的,而且它只是可以通过反射检查的元数据 据我所知,C#编译器没有任何关于return所用属性的特定知识,但您可以将其用于自己的代码契约。作为一个具体的例子,一些框架包括
call()
,只返回Test1
对象,但是用classTest2(g=5)
设置返回属性的目的是什么
什么事情应该改变或发生?但什么都没发生……有人能解释发生了什么吗
它对Test2对象有何影响?对象应该在哪里?它只是一个属性,就像其他属性一样——属性的使用取决于决定使用它的人。查看
return
的属性相对较少,但这是完全合法的,而且它只是可以通过反射检查的元数据
据我所知,C#编译器没有任何关于return
所用属性的特定知识,但您可以将其用于自己的代码契约。作为一个具体的例子,一些框架包括一个NotNullAttribute
,它在某种程度上错误地应用于整个方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyTest
{
class Program
{
static void Main(string[] args)
{
Test1 t1 = call();
Console.Out.WriteLine(t1);
Console.ReadLine();
}
[return: Test2(g = 5)]
public static Test1 call()
{
Test1 t1 = new Test1();
Test2 t2 = new Test2();
return t1;
}
}
class Test1 : Attribute
{
}
class Test2 : Attribute
{
public int g;
}
}
。。。表示它不会返回空引用。我认为这样写更合适(尽管不那么简洁):
[NotNull] string Foo()
。。。强调返回值是非空的,而不是整个方法的属性。返回上的属性影响(或不影响:见下文)返回值,而不是函数本身
但是,属性本身没有效果。其他代码(包括编译器)使用它们来修改系统的操作(例如,通过提供元数据)。在有东西可以读取该属性之前,它只是程序集中未使用的数据。您一小时前刚刚问了基本相同的问题-请不要一遍又一遍地重复您的问题-谢谢,我仍然不明白该属性的实际用途是什么?@user311215,其目的是提供钩子来自动化某些事情。在这种情况下,应该强制方法的返回值不能为null。它属于元编程领域。所以这里的第一段是正确的。属性可以是我们需要的任何东西。
return
属性是否得到内置代码分析器的认可?@mr5:不,在“vanilla.NET”中没有这样的东西。然而,C#8将在“可空引用类型”方面有一个新特性,在这一点上,您根本不需要手动应用属性等。我知道这是一个老问题,但我第一次看到这一点是在Azure函数输出绑定中-
[return:NotNull] string Foo()