首页 新闻 会员 周边

请教关于类的继承

0
[已解决问题] 解决于 2012-04-03 15:16

权限管理设计中 增加了BasePage,然后各个页面public partial class LanEmail_EmailView : BasePage继承BasePage

如何在Basepage中判断是哪个页面继承了它然后向它注册权限相应信息?

happydaily的主页 happydaily | 菜鸟二级 | 园豆:301
提问于:2012-03-31 18:06
< >
分享
最佳答案
0

你这样设计是不对的,父类是不应该“预计”到子类的存在的

如何在Basepage中判断是哪个页面继承了它然后向它注册权限相应信息

那么事实上就是子类的注册权限信息是不同的,你想把这些都归并到父类的一个方法里去。正确的做法是父类应该有一个PrepareAccessInfo的虚方法:

protected virtual void PrepareAccessInfo() 
{
//一些通用的实现
}

然后每个子类如果有独特的逻辑,就override这个方法,如果没有独特的逻辑,就可以不做任何事情而使用父类中的通用逻辑。这个方法你可以在适当的地方调用,比如page init的时候。




奖励园豆:5
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-04-01 10:24

不是这样想的,如果子类都要去override这个方法并且实现代码,那不是每个页面都要加方法了,我是觉得比较麻烦,我的思路是权限的内容存在数据,存的就是页面的类名(或者C#可以自动读出的特定内容),那么在Basepage里是不是可以反射子类的类名来把相应的权限继承到页面?

happydaily | 园豆:301 (菜鸟二级) | 2012-04-01 11:27
其他回答(3)
-2

被继承的方法加个参数,根据参数不太做相关的操作

最近有点小胖 | 园豆:3 (初学一级) | 2012-03-31 18:20
0

使用this.GetType()方法就是知道当前页面的类型了,可以使用这个类型来作为key区分各个页面的权限

小小刀 | 园豆:1991 (小虾三级) | 2012-03-31 18:54
0

你可以使用几种方式,一是使用事件,在基类中定义一个事件,然后在不同的页面登记该事件,在该事件中处理你想注册的信息,这样不同的子类就可以有不同的注册信息了。

第二的中你可以参考下设计模式中的模板模式;

第三种方式就是结合一二中方式,在PageBase中定义一个抽象或者虚方法functionA,在load事件中调用functionA方法,不同的子类实现或者重写functionA

yangtam | 园豆:369 (菜鸟二级) | 2012-03-31 22:37

能不能在父类作判断, 子类只要继承,不需要去实现方法就可以达到功能呢?

支持(0) 反对(0) happydaily | 园豆:301 (菜鸟二级) | 2012-04-01 07:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册