c# - 在 get 中返回值和分配属性有什么区别?
问题描述
如果我想让它方便返回任务的非异步方法。
public static Task CompletedTaskA { get { return Task.CompletedTask; } }
public static Task CompletedTaskB { get; } = Task.CompletedTask;
对于任何类型的上下文,是否应该优先选择一个?或者他们是一样的?我也想知道字符串也是如此,基本上我对属性所做的任何事情,即:
get {return "some string"; }
对比{ get; } = "some string";
编辑:我想澄清我对上述道具的使用。我有几个事件处理程序,它们将 Task 作为返回类型,由我正在使用的库提供给我。一个此类事件的示例:
private Task Client_MessageReceived(Message message)
{
Task.Run(async ()=> await HandleMessageReceived(message));
// here is where i would use it
return CompletedTask; // A OR B?
}
private async Task HandleMessageReceived(Message message)
{
// Do stuff with message that might take long and block the handler
}
我的意图是将已完成的任务保存在一个字段中(在这种情况下我选择一个只读属性)并继续使用它来满足任务返回。我想知道上述示例中的一个是否一直使用相同的已完成任务,而另一个每次都一直要求另一个已完成的任务?
解决方案
如果您去SharpLab并查看以下代码:
public class C
{
public void M()
{
}
public string Greetig_1
{
get{return "hello";}
}
public string Greeting_2{get;} = "hello";
}
您可以看到它Greeting_2
由成员变量支持:
public class C
{
[CompilerGenerated]
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly string <Greeting_2>k__BackingField = "hello";
public string Greeting_1
{
get
{
return "hello";
}
}
public string Greeting_2
{
[CompilerGenerated]
get
{
return <Greeting_2>k__BackingField;
}
}
public void M()
{
}
}
这一直持续到 IL 级别。由于Greeting_2
由成员变量支持,该变量在构造函数中初始化。
在您的示例中,Task.CompletedTask
您最终得到的是:
public static Task CompletedTaskB { get; } = Task.CompletedTask;
缓存Task
, 而:
public static Task CompletedTaskA { get { return Task.CompletedTask; } }
每次调用以获取CompletedTask
对象。Task
实际上,这将由 JIT 内联。该方法还具有不向您的类添加额外(隐藏)成员变量的优点,如果您有很多实例并且担心内存使用情况,这可能是一个问题。
推荐阅读
- apache-spark - 在大数据上优化 Pyspark UDF
- python - Python 中的 YouTube 类别
- ruby-on-rails - 使用记录作为语言环境的 I18 网址生成器错误
- xpath - 如果有,则只选择前面的第二个标签,或者只选择第一个标签
- jasmine - 有没有办法在融合中发布量角器测试结果并进行概述?
- powerbi - 对最终用户隐藏切片器中的项目 (Power BI)
- python - Buildozer 构建的应用程序崩溃:jnius.jnius.JavaException:发生 JVM 异常:找不到类
- javascript - 使用 querySelectorAll 验证表单时 - 如何选择适当的跨度来输出错误
- terraform - Terraform 错误 - 未设置错误更新服务器
- php - 使用 PHP 和 Laravel 创建计数可视化