gpt4 book ai didi

c# - 带有构造函数的抽象类,强制继承类调用它

转载 作者:太空狗 更新时间:2023-10-29 20:52:47 25 4
gpt4 key购买 nike

我有一个抽象类,带有构造函数XYZ(string name)
我还有一个继承自该抽象类的类。

如何强制继承类调用base(string name)

现在我可以使用 new Inherited() 并且它不会调用基础构造函数。我想强制用户在继承类中实现默认构造函数。

最佳答案

没有显式构造函数的类具有无参数构造函数。另一方面,如果您实现了带参数的构造函数但没有无参数的构造函数,您的类将无法在没有参数的情况下实例化。

换句话说:

public abstract class A 
{
public A(string x)
{
}
}

public class B : A
{
// If you don't add ": base(x)"
// your code won't compile, because A has a
// constructor with parameters!
public B(string x) : base(x)
{
}
}

也就是说,如果A有一个无参构造函数(或没有显式构造函数),B会自动调用基类构造函数。您无需在此处编写任何其他代码。

否则,如果你的基类有一个无参数构造函数和一个有参数构造函数,你就不能强制派生类自动调用除默认构造函数之外的构造函数(即所谓的无参数构造函数).

解决方法

好吧,这里没有特殊的解决方法,但请注意 C# 在构造函数和方法中都支持可选参数。

如果您想 100% 确定派生类将调用具体的基类构造函数,您可以使用带有可选参数的单个无参数构造函数来实现您的基类,并使用它代替构造函数重载:

public class A
{
public A(string x = "hello world") // or just string x = null
{

}
}

现在如果 B 类派生 AB 将始终调用 A 的基类构造函数,因为x 是可选的,它有一个默认值。

关于c# - 带有构造函数的抽象类,强制继承类调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28568391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com