Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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#构造函数_C# - Fatal编程技术网

混淆C#构造函数

混淆C#构造函数,c#,C#,今天我遇到了一些让我有点困惑的代码。我有一个叫做操作符的类。帮助我理解类的构造函数中发生了什么。我不明白为什么它有UsedImplicity属性,我也不知道“this(r=>{})”实现了什么 public class Operator { [NotNull] readonly IUnityContainer _container; [NotNull] readonly ServerWrapper _server; [UsedImplicitly] public Operator() :

今天我遇到了一些让我有点困惑的代码。我有一个叫做操作符的类。帮助我理解类的构造函数中发生了什么。我不明白为什么它有UsedImplicity属性,我也不知道“this(r=>{})”实现了什么

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

[UsedImplicitly]
public Operator()
  : this(r => { })
{
}
更新-另一个构造函数:

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>());
}
公共运算符([NotNull]操作寄存器)
{
_容器=新的UnityContainer()
.RegisterType(
新的ContainerControlled LifetimeManager())
.RegisterType();
寄存器(_容器);
_operator=newoperatorwrapper(_container.Resolve());
}

构造函数提供了一种回调机制:在实例化一个
操作符时,作为调用者,您可以传入一个带有
操作
签名的方法指针(lambda或不lambda),这将是一个
无效回调(IUnityContainer c)
,例如,
c=>{dou something_with_c(c)}

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


第二个子问题:
usedimplicity
是当一个符号从未被引用,而是打算被反射使用或在外部调用时,消除警告,这是有很好的文档记录的。

它调用另一个带有
操作符(Action)
签名的ctor重载。请告诉我,这个类上的所有构造函数,我们可以清楚地知道调用的内容和时间。它肯定是从其他东西派生出来的……或者有其他的构造函数Resharper(和其他工具)使用
usedimplicity
属性来表示“此构造函数已使用,所以不要将其标记为未使用”。-say it“表示标记的符号被隐式使用(例如,通过反射,在外部库中),因此此符号不会被标记为未使用(以及其他使用检查)。”在VS中打开键盘设置(如果您在VS中),并将Edit.GoTo命令映射到rational键盘快捷键(我的是ctrl-shft-g)。然后,当你想知道那边到底是什么东西时,只需将光标放在上面,然后编辑.GoTo,看看结果如何。