令人困惑的C#构造函数

时间:2018-10-15 15:42:30

标签: c#

我今天遇到了一些代码,这让我有些困惑。我有一堂课叫操作员。帮助我了解该类的构造函数中发生了什么。我不明白为什么它具有UsedImplicity属性,并且不知道“ this(r => {})”的作用。

public class Operator
{
[NotNull] readonly IUnityContainer _container;
[NotNull] readonly ServerWrapper _server;

[UsedImplicitly]
public Operator()
  : this(r => { })
{
}

UPDATE-其他构造函数:

public Operator([NotNull] Action<IUnityContainer> register)
{
  _container = new UnityContainer()
    .RegisterType<ISettingsReader, MessageBusSettingsReader>(
      new ContainerControlledLifetimeManager())
    .RegisterType<IImpersonationStrategyFactory, ImpersonationStrategyFactory>();

  register(_container);

  _operator= new OperatorWrapper(_container.Resolve<ISettingsReader>());
}

1 个答案:

答案 0 :(得分:4)

构造函数提供了一种回调机制:在实例化Operator时,作为调用方的您可以传入带有Action<IUnityContainer>签名的方法指针(无论是否为lambda),即为{{1 }}或void Callback(IUnityContainer c)

默认构造函数,即不带参数的构造函数,将构造函数与一个空的方法主体链接在一起,它基本上会忽略(丢弃)容器回调。这样做是因为它需要在第二个构造函数中执行初始化代码,但是如果没有其必需的参数就无法调用它。

第二个子问题:c => { do_something_with_c(c); }是为了避免警告,因为从未引用过某个符号,而是打算将其用于反射或从外部调用,因此here已有详细记录。