关于自己定义Page的一个小问题

关于自己定义Page的一个小问题

[Key word:Page]
[测试环境:OS,WinXp+sp2;开发环境,Microsoft VS.NET2003;.Framework,1.1]

前些时候遇到这样的一个问题:
我自己定义了一个通用Page,继承自System.Web.UI.Page
public class BasePage:Page{
}
完了之后,又这样做了一个简单的继承:
public class AdminPage:BasePage{
}
然后在我的设计页面里的Web Form继承自AdminPage的,会出现错误,提示父类不能实现而不能使用设计模式。

这是可能理解的,因为在设计的时候,你的web form要实现这样的一个类,当然这个类得是存在的。但没想到遇到以下几个问题的时候,也会出现同样的问题:
1、自己定义的Page类里有任何的纯虚函数的时候,也没有办法实现(在设计时),且不说多次继承。
2、在与构造函数相关的所有方法中,有访问不到的数据时,也会出现错误。

这里我讨论一下第二种情况以及解决方法,先看我的一个继承自Page类的代码(部份):

     public   class  BasePage : Page,IUIPage
    
{
        
fileds

        
public BasePage()
        
{
            
this.m_showDebugMsg    = WaveSystem.SystemVarible["ShowDebugMessage"].ToString().ToLower()=="yes";
            
this.m_showCopyRight    = WaveSystem.SystemVarible["ShowCopyRight"].ToString().ToLower()=="yes";
        }

    }

这里的WaveSystem.SystemVarible["ShowDebugMessage"]在运行时会从数据库里取得相关数据。而这样给我带来的后果是:所有继承自BasePage的web form都不能使用设计页面了(都是HTML模式)。这让我很郁闷,因为这些信息也只有在运行时才有意义,设计环境不知道,所以它必须在设计的时候也取得WaveSystem.SystemVarible["ShowDebugMessage"]的值,而这显然是不能实现的。

就这个问题,上次也简单的讨论过一次,后来没找到解决方法,只好用常量先代替:
    this.m_showDebugMsg  = true;
    this.m_showCopyRight = false;

然而今天偶然遇到一个方法,因为我不能绝对保证在运行时也可以得到WaveSystem.SystemVarible["ShowDebugMessage"]的值,所以修改了一下代码(部份):

         public  BasePage()
        
{
            
try
            
{
                
this.m_showDebugMsg        = WaveSystem.SystemVarible["ShowDebugMessage"].ToString().ToLower()=="yes";
                
this.m_showCopyRight    = WaveSystem.SystemVarible["ShowCopyRight"].ToString().ToLower()=="yes";
            }

            
catch
            
{
                
this.m_showDebugMsg        = true;
                
this.m_showCopyRight    = false;
            }

        }

歪打正着,没想到这样一改,在设计模式下也通过了(注意,要先编译一下这个页面)。那么简单的结论就是:设计web form的时候,环境是在“运行”我们的部份代码的。而又不是真正的运行,甩以有一些只有在运行时才能得到的数据,在设计时如果“访问”到了,那么就会出现这样的错误。
我不知道VS.net2005里是否也会有这样的问题,但不管怎样,这次偶然的结果为我提供了一个方法解决这一问题。而关于虚函数及多次继承问题,还有待解决。

你可能感兴趣的:(page)