是否可以为C#类定义另一个无参数构造函数?
换句话说,我有一个名为Foo
的类。 我想要一个默认的构造函数 Foo()
和另一个构造函数SpecialFoo()
。 如果SpecialFoo()
调用Foo()
构造函数,我不介意。
我能做到吗?
是否可以为C#类定义另一个无参数构造函数?
换句话说,我有一个名为Foo
的类。 我想要一个默认的构造函数 Foo()
和另一个构造函数SpecialFoo()
。 如果SpecialFoo()
调用Foo()
构造函数,我不介意。
我能做到吗?
你只能有一组指定参数的构造函数,因此你无法拥有两个无参数的构造函数。
你可以拥有另一个public static Foo方法,它将是工厂方法,并返回Foo类的新实例,但要使用它,你不会使用new关键字:
class Foo
{
public static Foo SpecialFoo()
{
return new Foo();
}
}
var instance1 = new Foo();
var instance2 = Foo.SpecialFoo();
构造函数与方法一样,不能具有相同参数列表的重载。但是,您可以创建一个静态工厂方法,如下所示:
public class Foo
{
public static Foo SpecialFoo() {
...
}
}
这样调用:
var foo = new Foo();
var specialFoo = Foo.SpecialFoo();
public class Foo
{
public Foo(bool special) : this() {
if (special)
{
...
}
}
}
然后像这样调用:
var foo = new Foo();
var specialFoo = new Foo(true);
new
隐藏基本工厂方法,否则会收到警告,并且在基类上隐藏静态成员通常是不好的做法。)Foo
是可继承的,则更好的解决方案是使用单独的构造函数。我刚刚更新了我的答案,并提供了一个合适的解决方案。 - p.s.w.g
public class Foo
{
public Foo()
{
// do something
}
}
public class SuperFoo : Foo
{
public SuperFoo() : base() // call the Foo constructor - you do not have to call base explicitely, just a more verbose example
{
// do something else
}
}
var x = new Foo();
- ta.speot.is