c# - 在构造函数中委托(delegate)调用

标签 c# constructor delegates nullreferenceexception

我遇到了一个很容易解决但在我年轻的时候还没有遇到过的设计问题。

我有一个类需要在发生任何其他事情之前完成一些设置过程。

但是,在构造此类的过程中,我在构造函数的参数中有一个可以传递的委托(delegate),以便用户可以将自己的信息添加到类中。

然而,当它被调用时,正在创建类的范围仍然没有有效的实例,因此会发生空异常错误。

我该如何围绕这个进行设计?我应该将“this”的实例传递给该委托(delegate)吗?

在这里做出什么好的决定?我有一个“StartServices()”方法,我可以在其中轻松调用委托(delegate),但我觉得设计明智,它应该在构造函数中。

多谢指教!

最佳答案

听起来你想传递一个 Action<T> (或类似的),以便类想要委托(delegate)时,它可以调用theDelegate(this) ;例如:

var instance = new SomeType(..., obj => { /* extra code invovling obj */ });

然后obj将是创建时的实例,它的优点是编译器生成的方法不需要任何状态/捕获(除非您自己需要)。

但是!出于与 virtual 相同的原因,我会谨慎地调用构造函数内部的委托(delegate)。应该谨慎对待 - 在深层对象模型中,整个类可能不会在您的中级构造函数(调用委托(delegate)或重写方法)触发时完全创建,从而提供对处于不完整状态的对象的狡猾访问。

关于c# - 在构造函数中委托(delegate)调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971988/

相关文章:

c# - 配置持久层时出现异常

c# - 使用自定义数据创建 Activereports PageReport

java - 在无符号字节变量中表示有符号字节

Javadocs - @param 名称未找到

c# - 在 C# 构造函数中使用 this()

c# - 将委托(delegate)与参数一起传递给函数

c# - 清除 Web 浏览器控制所有站点的 cookie,而不清除 IE 本身

c++ - 无法从具有虚拟继承的类派生(C++ 虚拟继承)

.net - 从 MethodInfo 构建一个委托(delegate)?

c# - 使用 Moq 模拟 Delegate.Invoke() 在 LINQ 中抛出 InvalidCast 异常