Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以扩展页面事件的System.Web.Ui.Page派生类?_C#_Asp.net_Derived Class - Fatal编程技术网

C# 可以扩展页面事件的System.Web.Ui.Page派生类?

C# 可以扩展页面事件的System.Web.Ui.Page派生类?,c#,asp.net,derived-class,C#,Asp.net,Derived Class,我创建了一个从System.Web.Ui.Page继承的BasePage类。在这个基类中,我有一个bool属性来检查页面是否安全。最初,我将代码放在(基类的)PreInit事件中,但仔细考虑之后,我的派生页面将无法在PreInit之前设置bool值。然后我考虑在dervcied页面的PreInit中设置值,并在基类的PageInit中检查该值,但是如果我需要在派生页面中使用PreInit呢 我考虑过使用分部方法,但我认为我不能这样做,因为页面事件在System.Web.Ui.page中不是分部的

我创建了一个从System.Web.Ui.Page继承的BasePage类。在这个基类中,我有一个bool属性来检查页面是否安全。最初,我将代码放在(基类的)PreInit事件中,但仔细考虑之后,我的派生页面将无法在PreInit之前设置bool值。然后我考虑在dervcied页面的PreInit中设置值,并在基类的PageInit中检查该值,但是如果我需要在派生页面中使用PreInit呢

我考虑过使用分部方法,但我认为我不能这样做,因为页面事件在System.Web.Ui.page中不是分部的,对吗

顺便说一下,我的BasePage类是一个抽象类

这就是我现在所做的(我没有对此进行测试,但假设它可以工作):


为什么不在
构造函数中设置您的ISecure,因为您最早就可以获得ISecure

只需将其定义为:

public _Default()
{
 IsSecure = true;
}

为什么不在
构造函数中设置您的ISecure,因为您最早就可以获得ISecure

只需将其定义为:

public _Default()
{
 IsSecure = true;
}

更好的解决方案可能是重写基类中的OnInit方法。现在仍然可以在页面中处理init事件,并在引发事件之前执行安全检查

因此:


更好的解决方案可能是重写基类中的OnInit方法。现在仍然可以在页面中处理init事件,并在引发事件之前执行安全检查

因此:


我建议您将
IsSecure
属性抽象(并且是只读的),并让派生页面实现它。确定属性值的逻辑包含在属性的getter中

基本页面中

protected abstract bool IsSecure { get; }
\u默认值中
等:

protected override bool IsSecure 
{
    get { // return true or false depending on some condition }
}

我建议您将
IsSecure
属性抽象(并且是只读的),并让派生页面实现它。确定属性值的逻辑包含在属性的getter中

基本页面中

protected abstract bool IsSecure { get; }
\u默认值中
等:

protected override bool IsSecure 
{
    get { // return true or false depending on some condition }
}

您的代码很好,如果希望能够扩展PageInit,只需重写并调用派生类中的基即可

public partial class _Default : BasePage
{
    protected override void Page_Init(object sender, EventArgs e)
    {
        base.Page_Init(sender, e);
        //more code here
    }
}

您的代码很好,如果希望能够扩展PageInit,只需重写并调用派生类中的基即可

public partial class _Default : BasePage
{
    protected override void Page_Init(object sender, EventArgs e)
    {
        base.Page_Init(sender, e);
        //more code here
    }
}

你的想法是正确的。我不明白你在哪里遇到了问题。你能举一个伪代码的例子吗?当你说“页面是否安全”是什么意思?用户是否有权查看它?@Anders Fjeldstad-是的,这是出于用户安全原因。我们对此有特殊需要。@Bazzz-我在使用分部方法时遇到了一个问题,但我正试图获得一些建议,了解如何最好地从派生页面设置布尔值,并始终在基类中检查它。在页面生命周期的什么时候(哪个事件),派生页面能够设置属性?您的想法是正确的。我不明白你在哪里遇到了问题。你能举一个伪代码的例子吗?当你说“页面是否安全”是什么意思?用户是否有权查看它?@Anders Fjeldstad-是的,这是出于用户安全原因。我们对此有特殊的需要。@Bazzz-我在使用分部方法时遇到了一个问题,但我正试图获得一些建议,了解从派生页设置布尔值的最佳方法,并始终在基类中对其进行检查。在页面生命周期的什么时候(哪个事件),派生页能够设置属性?这没什么错,但我不希望看到应用程序逻辑嵌入到构造函数中。构造函数应该是快速和轻量级的。最好将检查合并到页面生命周期事件中。只设置属性,我认为这相当轻量级。。我想避免在构造函数中使用逻辑。不过我考虑过了。这没什么错,但我不想看到应用程序逻辑嵌入到构造函数中。构造函数应该是快速和轻量级的。最好将检查合并到页面生命周期事件中。只设置属性,我认为这相当轻量级。。我想避免在构造函数中使用逻辑。不过我想了想。