gpt4 book ai didi

c# - 来自其基类的传递构造函数

转载 作者:行者123 更新时间:2023-11-30 16:05:23 25 4
gpt4 key购买 nike

外部框架有以下类:

public class Boatmaker
{
}

public class Wood
{
}

public class Axe
{
}

public class Lake
{
}

public class Boat
{
public Boat(Wood wood, Axe axe) {
}
public Boat (Boatmaker maker) {
}
public Boat (Lake lake) {}
}

我需要做很多 Boat 的子类化。对于我的每个子类,我必须假设外部框架可能希望通过上述任何构造函数实例化它。所以我的子类获得传递构造函数。注意它们是如何永不消失的:

public class SmallBoat: Boat
{
public void DoSmallBoatStuff() {
// some code here
}
private void Initialize() {
this.DoSmallBoatStuff();
}
public SmallBoat(Wood wood, Axe axe): base(wood, axe) {
this.Initialize();
}
public SmallBoat (Boatmaker maker): base(maker) {
this.Initialize();
}
public SmallBoat (Lake lake): base(lake) {
this.Initialize();
}
}

public class Canoe: SmallBoat
{
public void DoCanoeStuff() {
// some code here
}
private void Initialize() {
this.DoCanoeStuff();
}
public Canoe(Wood wood, Axe axe): base(wood, axe) {
this.Initialize();
}
public Canoe (Boatmaker maker): base(maker) {
this.Initialize();
}
public Canoe(Lake lake): base(lake) {
this.Initialize();
}
}

我想知道是否有一种方法可以简化代码的外观。 SmallBoat 和 Canoe 中构造函数的编写方式之间的唯一区别是 SmallBoat 或 Canoe 一词。其他一切都一样。

因此,如果有一种方法可以在不实际使用构造函数中的类名的情况下编写构造函数,那将大有帮助。我可以在没有 .tt 文件的情况下使用直接复制和粘贴(这对我来说不太可行——我的大部分工作都不是在 Visual Studio 中完成的)。有办法吗?

最佳答案

没有。那没有。您必须指定要使当前类可用的基类的哪些构造函数。不提真正的类名就无法编写构造函数。

这可能是您展示的一种简化,但如果 Initialize 是唯一被调用的方法,您可能希望将该调用移动到调用 protected Initialize 的基类您可以从实现类覆盖的方法。 (您必须考虑调用该方法和实例化属性/字段的顺序。您可能会在那里遇到麻烦,因此在您的情况下可能不可行)

关于c# - 来自其基类的传递构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668058/

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