注入的依赖项应该是只读字段还是私有属性

mik*_*agg 2 c#

我们在我的团队中对是否应该将注入的依赖项存储为只读字段存在小分歧:

public class MyClient
{
    private readonly IService service;
    public MyClient(IService service)
    {
        this.service = service;
    }
 }
Run Code Online (Sandbox Code Playgroud)

或作为私有只读属性:

public class MyClient
{
    private IService Service { get; }
    public MyClient(IService service)
    {
        Service = service;
    }
 }
Run Code Online (Sandbox Code Playgroud)

一种选择比另一种选择有什么优势吗?我喜欢前者,但似乎我们班有一半使用后者。

can*_*on7 5

您应该使用只读字段。

在字段上使用属性的三个原因:

  1. 您想添加一些在访问属性时运行的额外逻辑。
  2. 您希望保留将来添加一些额外逻辑的权利,而无需更改您的界面。
  3. 您正在使用一些仅处理属性并忽略字段的工具/序列化框架。

第 2 点是为什么人们建议为所有公共(有时是受保护的)成员使用属性而不是字段。第 1 点(可能还有第 3 点,在极少数情况下)是您创建私有财产的唯一原因。

这些要点都不适用于这里。该物业只是增加了额外的开销,没有理由为零收益支付这笔费用。