相关疑难解决方法(0)

在基类构造函数中调用虚方法

我知道,从基类的构造函数调用虚方法可能是危险的,因为子类可能不处于有效状态.(至少在C#中)

我的问题是如果虚拟方法是初始化对象状态的那个?它是很好的做法,还是应该是两个步骤,首先创建对象,然后加载状态?

第一个选项:(使用构造函数初始化状态)

public class BaseObject {
    public BaseObject(XElement definition) {
        this.LoadState(definition);
    }

    protected abstract LoadState(XElement definition);
}
Run Code Online (Sandbox Code Playgroud)

第二种选择:(使用两步法)

public class BaseObject {
    public void LoadState(XElement definition) {
        this.LoadStateCore(definition);
    }

    protected abstract LoadStateCore(XElement definition);
}
Run Code Online (Sandbox Code Playgroud)

在第一种方法中,代码的使用者可以使用一个语句创建和初始化对象:

// The base class will call the virtual method to load the state.
ChildObject o = new ChildObject(definition)
Run Code Online (Sandbox Code Playgroud)

在第二种方法中,消费者必须创建对象然后加载状态:

ChildObject o = new ChildObject();
o.LoadState(definition);
Run Code Online (Sandbox Code Playgroud)

c# c++ java constructor

32
推荐指数
2
解决办法
2万
查看次数

覆盖ASP.NET代码隐藏文件中的Page类构造函数 - 何时调用?

如果我覆盖System.Web.UI.Page构造函数,如图所示,DoSomething()何时在页面生命周期中被调用?我似乎无法在任何地方找到这个记录.

namespace NameSpace1
{
    public partial class MyClass : System.Web.UI.Page
    {
        public MyClass()
        {
            DoSomething();
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

供参考,这是ASP.NET页面生命周期概述:

http://msdn.microsoft.com/en-us/library/ms178472.aspx

结果是MSDN文章中的最佳答案.我只需要仔细查看图表.构造是页面生命周期中的第一个事件(在PreInit,Init,Load等之前).

图http://img156.imageshack.us/img156/9246/lifecyclen.jpg

.net c# asp.net visual-studio

11
推荐指数
1
解决办法
8715
查看次数

标签 统计

c# ×2

.net ×1

asp.net ×1

c++ ×1

constructor ×1

java ×1

visual-studio ×1