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