gpt4 book ai didi

c# - 重载 "base"构造函数或 "this"构造函数?

转载 作者:太空狗 更新时间:2023-10-29 20:12:18 24 4
gpt4 key购买 nike

我有一些类型是从简化的 Base 派生的,如下所示。

我不确定在重载构造函数时是使用基类的构造函数还是this构造函数。

ConcreteA 重载构造函数纯粹使用 base 构造函数,而
ConcreteB 重载前两个重载使用 this

重载构造函数的更好方法是什么?

public abstract class Base
{
public string Name { get; set; }
public int? Age { get; set; }

protected Base() : this(string.Empty) {}
protected Base(string name) : this(name, null) {}
protected Base(string name, int? age)
{
Name = name;
Age = age;
}
}

public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
}
}

public class ConcreteB : Base
{
public ConcreteB() : this(string.Empty, null){}
public ConcreteB(string name): this(name, null){}
public ConcreteB(string name, int? age) : base(name, age)
{
}
}

[编辑]看起来像 Ian Quigley 在他的 answer 中提出的建议似乎有道理。如果我有一个初始化验证器的调用,ConcreteA(string) 将永远不会在以下情况下初始化验证器。

public class ConcreteA : Base
{
public ConcreteA(){}
public ConcreteA(string name) : base(name) {}
public ConcreteA(string name, int? age) : base(name, age)
{
InitializeValidators();
}
private void InitializeValidators() {}
}

最佳答案

这个。因为如果您曾经将代码放在 ConcreteB(string, int?) 中,那么您希望只有字符串的构造函数来调用它。

关于c# - 重载 "base"构造函数或 "this"构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751575/

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