C#构造函数无法调用自身

时间:2017-09-02 09:21:56

标签: c#

我的问题是我无法为构造函数调用此关键字,如下所示。

public UnitofWork(IDbTransaction transcation, Action<UnitofWork> onCommitOrRollback)
    : this(transcation, onCommitOrRollback)
{

}

“Constructor cannot call itself” error message

使用base代替:

“object does not contain a constructor that takes 2 arguments” error message

任何人都可以解释一下这个实例发生了什么问题。

该项目是类库,我在其中使用了一个名为UnitofWork的类。这里,UnitofWork是一个具有不同参数传递的构造函数。这些参数本身将再次为自己调用以进行事务处理。

1 个答案:

答案 0 :(得分:2)

你有一个构造函数,它接受IDbTransactionAction<UnitofWork>,并通过调用构造函数开始,该构造函数需要IDbTransactionAction<UnitofWork>,也就是说自己。

然后立即调用自己,然后立即调用自己,然后立即调用自己......

如果允许,则会发生以下两种情况之一:

  1. 它会继续对自己进行这些调用,直到StackOverflowException崩溃了应用程序。

  2. 堆栈的使用被优化掉了,所以它只是在无限循环中永远称自己。

  3. 无论哪种方式,它都是毫无意义的,所以它显然是错误的,所以编译器不允许你这样做是好的。

    相反,构造函数必须:

    1. 使用this在同一类型上调用不同的构造函数。
    2. 使用base调用基类型的构造函数。
    3. 两者都不使用(与使用base()调用基类型上的无参数构造函数相同。