Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#使用return属性做什么?_C# - Fatal编程技术网

c#使用return属性做什么?

c#使用return属性做什么?,c#,C#,这里的方法call(),只返回Test1对象,但是用classTest2(g=5)设置返回属性的目的是什么 什么事情应该改变或发生?但什么都没发生……有人能解释发生了什么吗 它对Test2对象有何影响?对象应该在哪里?它只是一个属性,就像其他属性一样——属性的使用取决于决定使用它的人。查看return的属性相对较少,但这是完全合法的,而且它只是可以通过反射检查的元数据 据我所知,C#编译器没有任何关于return所用属性的特定知识,但您可以将其用于自己的代码契约。作为一个具体的例子,一些框架包括

这里的方法
call()
,只返回
Test1
对象,但是用class
Test2(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()