c# - 我可以在我的子类中重复使用我的超类的可选构造函数参数吗?
问题描述
我有一个带有构造函数的超类,它使用可选参数来避免编写多个重载的构造函数:
namespace Example
{
abstract class Super
{
string mandatory;
string optional;
const string optionalDef = "default";
public Super(string mandatory, string optional = optionalDef)
{
this.mandatory = mandatory;
this.optional = optional;
}
}
}
构造函数可以用一个或两个参数调用,所以就像我在实现两个重载的构造函数一样。现在我正在尝试在子类中“重用”它:
namespace Example
{
class Sub : Super
{
public Sub(string mandatory, string optional) : base(mandatory, optional) { }
public Sub(string mandatory) : base(mandatory) { }
}
}
由于我的默认值在超类中是“隐藏的”,我不知道如何从避免重载构造函数的超类中镜像我的结构。我想做这样的事情当然不存在:
public Sub(string mandatory, string optional = undefined) : base(mandatory, optional) { }
我尝试过的另一件事是:
public Sub(string mandatory, string optional = base.optionalDef) : base(mandatory, optional) { }
我认为如果我制作optionalDef
静态(这似乎是一种黑客行为),这可能会起作用,但是一旦我Sub
再次子类化,我认为它就不再起作用了(因为base.base
不允许)。
谢谢!
解决方案
您可以简单地进行optionalDef
保护:
abstract class Super
{
string mandatory;
string optional;
protected const string optionalDef = "default";
public Super(string mandatory, string optional = optionalDef)
{
this.mandatory = mandatory;
this.optional = optional;
}
}
abstract class Sub : Super
{
public Sub(string mandatory, string optional = optionalDef) : base(mandatory, optional) { }
}
如果由于某种原因这不可能并且null
不是可能的值,您也可以使用它。
推荐阅读
- r - 使用 dplyr 在长格式数据上计算因子水平和数值的唯一出现次数
- jmeter - 如何在 JMeter 的单个脚本中对多个字段执行验证
- bash - 即使命令失败,退出状态也会返回“0”
- c# - 从 Intranet 网页中提取链接
- c# - 如何订阅 WndProc 方法并接收它的参数
- javascript - 如何使用javascript剪切文本?
- node.js - express-validator: LHS 括号
- dart - Dart:让流中抛出的异常传播并在调用者中捕获它
- javascript - 匹配任何变体的 jQuery IndexOf 数组
- python - Python正则表达式在搜索词后返回字符