我可以使用主构造函数并定义构造函数体吗?
这是我使用辅助辅助构造函数的try --我知道this
是模棱两可的,但我不知道是否有办法修复它……或者我必须求助于田野?
public class Thing(int a, int b) {
public Thing(int a, int b) : this(a ,b) {
// do some stuff using `a` and `b`
}
}
我可以使用主构造函数并定义构造函数体吗?
这是我使用辅助辅助构造函数的try --我知道this
是模棱两可的,但我不知道是否有办法修复它……或者我必须求助于田野?
public class Thing(int a, int b) {
public Thing(int a, int b) : this(a ,b) {
// do some stuff using `a` and `b`
}
}
如果您需要在构造函数中使用常规的构造函数,我认为在这里使用主构造函数是没有意义的,因为它们不是为这些事情而设计的.如果出于某种原因,你仍然想要,你可以考虑一些我认为丑陋的黑客.
例如,向主ctor添加一个虚拟参数:
public class Thing(int a, int b, object? _)
{
public Thing(int a, int b) : this(a ,b, null) {
// do some stuff using `a` and `b`,
Console.WriteLine($"{a}_{b}");
}
}
或者引入一些虚拟字段来使一些静态的可调用方法来完成这项工作并赋值:
public class Thing(int a, int b)
{
private int _ = DoThing(a, b);
private static int DoThing(int a, int b)
{
Console.WriteLine($"{a}_{b}");
return a + b;
}
}
正如我所说的,变通方法并不是很好,在我看来,最好还是使用"普通"的ctor.
还请注意,至少有一些IDE(目前没有可用的VS),如Rider,提供了重构,将主ctor扩展为普通ctor:
所以你可以开始用主ctor来设计类,然后把它扩展成一个普通的类,这样你就可以省go 一些你认为繁琐的工作(同样,Rider/ReSharper也可以用普通的ctor为你生成字段和赋值).