gpt4 book ai didi

c# - 调用基本构造函数时重用初始化方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:40:06 29 4
gpt4 key购买 nike

我想使用构造函数在派生类中初始化一个 protected 成员,但是由于我正在调用 base(),所以我不能调用 this(),这使得我的一些调用“有味道”:

public class ABase
{
public object Param1 { get; set; }
public object Param2 { get; set; }
protected object Param3 { get; set; }

public ABase()
: this(null, null)
{ }

public ABase(object param1)
: this(param1, null)
{ }

public ABase(object param1, object param2)
{
Param1 = param1;
Param2 = param2;
}
}

public class A : ABase
{
public A()
{ InitParam3(); }

public A(object param1)
: base(param1)
{ InitParam3(); }

public A(object param1, object param2)
: base(param1, param2)
{ InitParam3(); }

private void InitParam3()
{
Param3 = "param3";
}
}

有没有办法避免在每个构造函数中调用 InitParam3()。我对所有设计更改持开放态度。

最佳答案

为子类使用构造函数链,然后调用基类的最完整构造函数。

    public class ABase
{
public object Param1 { get; set; }
public object Param2 { get; set; }
protected object Param3 { get; set; }

public ABase()
: this(null, null)
{ }

public ABase(object param1)
: this(param1, null)
{ }

public ABase(object param1, object param2)
{
Param1 = param1;
Param2 = param2;
}
}

public class A : ABase
{
public A() : this(null, null)
{ }

public A(object param1)
: this(param1m, null)
{ }

public A(object param1, object param2)
: base(param1, param2)
{ InitParam3(); }

private void InitParam3()
{
Param3 = "param3";
}
}

更新(删除了重复的默认值):

public abstract class ABase
{
protected const object DefaultParam1 = null;
protected const object DefaultParam2 = null;

public object Param1 {get;set;}
public object Param2 { get; set; }
protected object Param3 { get; set; }

public ABase(object param1 = DefaultParam1, object param2 = DefaultParam2)
{
Param1 = param1;
Param2 = param2;
}
}

public class A : ABase
{
public A(object param1 = DefaultParam1, object param2 = DefaultParam2)
: base(param1, param2)
{
Param3 = "param3";
}
}

关于c# - 调用基本构造函数时重用初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9869263/

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