怎么限制父类构造函数的调用时间?

白衣如花 2021-02-22 11:36:27
有个蛋疼的事情。
public class Parent
{
public Parent()
{
Init();
}

protected virtual void Init()
{
}
}

public class Child : Parent
{
private int someproperty = 1;
public Child(int i) : base()
{
this.someproperty = i;
}

protected override void Init()
{
// 此时i永远是初始值1
if (i == 0)
dosomething
}
}


parent是一个库类,init是用于界面绘制的方法,我想用一个属性来控制界面绘制的效果,但执行顺序是:
Child(int i) --> base() --> init() --> this.someproperty = i;

所以我想要的效果没有达到
...全文
269 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
楠小南 2021-02-23
  • 打赏
  • 举报
回复
父类你又改不了,整不了
正怒月神 2021-02-23
  • 打赏
  • 举报
回复
你考虑一下,是不是不应该继承Parent这个第三方类库。 如果实在不行, 就在初始化里,在执行一遍init
public Child(int i) : base()
    {
        this.someproperty = i;
this.Init()
    }
圣殿骑士18 2021-02-23
  • 打赏
  • 举报
回复
把someproperty 放Parent里去吧,
public class Parent
{
    protected int key = 0;
    public Parent(key)
    {
        this.key = key;
        Init();
    }

    protected virtual void Init()
    {
    }
}

public class Child : Parent
{
    public Child(int i) : base(i)
    {
    }

    protected override  void Init()
    {
        if (key == 0)
            dosomething
    }
}
白衣如花 2021-02-23
  • 打赏
  • 举报
回复
引用 3 楼 兔子党逍遥 的回复:
执行顺序是对的,和你理解的相同,不过init会比你赋值更早,所以和你预期不同。
有什么解决方案吗,我想控制绘制效果
兔子-顾问 2021-02-23
  • 打赏
  • 举报
回复
执行顺序是对的,和你理解的相同,不过init会比你赋值更早,所以和你预期不同。
白衣如花 2021-02-23
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
不要再构造函数内部调用虚函数
哎,父类是第三方的控件类。
真相重于对错 2021-02-23
  • 打赏
  • 举报
回复
不要再构造函数内部调用虚函数
yunlight 2021-02-23
  • 打赏
  • 举报
回复
控制不了,只能后面重绘
zijiang001 2021-02-23
  • 打赏
  • 举报
回复
class Child : Parent { public Child(int i) : base() { if (i == 0) { base.Init(); } else { //dosomething } } protected override void Init() { } }

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧