反射的另类实现。(不知道这么用还算不算反射了?)

简介: 在asp.net里面实现反射除了用 Assembly.Load("SMS").CreateInstance("SMS.短信" + 短信开头的编号)  之外还有没有其它的方法呢? .net里面有UserControl ,而UserControl 又可以使用 Page.LoadControl("UC_Show1.ascx") 的方式来加载。

在asp.net里面实现反射除了用
Assembly.Load("SMS").CreateInstance("SMS.短信" + 短信开头的编号) 
之外还有没有其它的方法呢?

.net里面有UserControl ,而UserControl 又可以使用 Page.LoadControl("UC_Show1.ascx") 的方式来加载。当然 UserControl 也是可以继承的。

Page.LoadControl 的参数是字符串,那么就可以动态设置了。

于是“反射”也就实现了。

我们先定义一个基类: UC_Base
public   class  UC_Base: System.Web.UI.UserControl
    
{
        
private string strCusID = "";
        
        
/**//// <summary>
        
/// 客户ID
        
/// </summary>

        public string CusID
        
{
            
get{return strCusID;}
            
set{strCusID = value;}
        }


        
/**//// <summary>
        
/// 显示数据
        
/// </summary>
        
/// <returns></returns>

        public virtual bool ShowData()
        
{
            
return true;
        }



然后建立UserControl 若干,让这些UserControl都继承 UC_Base
public   class  UC_Show1 : UC_Base
    
{
        
public override bool ShowData()
        
{
            Response.Write(
"我是子类一,我要显示数据了");
            
return true;
        }


}


最后在建立一个 asp.net页面,里面放一个 PlaceHolder 控件,然后在 Page_Load 写如下几行就ok了。
HBS.UCTest.UC_Base ucBase  =  (UC_Base)Page.LoadControl( " UC_Show1.ascx " );

            PH.Controls.Add(ucBase);

            ucBase.CusID 
=   " 11 " ;
            ucBase.ShowData();


使用这种方法有两个优点:

1、不仅可以加载算法,还可以加载控件。
2、可以让表单更灵活的组合,更容易的实现控件级别的复用。
3、可以实现不用编译就可以修改程序。可以利用“代码前置”的功能,把 ShowData() 的实现的代码写在 .ascx文件里面,这样修改之后不用编译就可以看到修改后的效果了。在一些特殊的情况下会用到。


好像大家总是想把控件和算法分离开来,但是在有些时候合在一起考虑也许会更方便。

或则即使分离出来,控件是不是也可以“享受”算法的待遇呢?

至于效率嘛,还没有测试。


最近写一个项目,要在一个表单里处理好几个表,加起来有几十个字段了,所以就用了UserControl来才分,然后在动态的加载,把代码分散在各个 UserControl 里面,一个页面里的代码少了很多,也就便于阅读和修改维护,每一个UserControl 的模式也基本相同。

同时呢如果多个页面用到了相同的表单(或者是一部分),那么就可以用 UserControl 来达到复用的效果。



相关文章
|
4月前
|
设计模式 uml UED
乱用继承导致的类爆炸
摘要(Markdown格式): 了解**复杂度守恒定律**,源于1984年,指出应用的复杂性无法消除,只能转移。在探究设计模式时,发现了**桥接模式**。桥接模式通过组合而非继承处理多维度变化,避免类爆炸问题。当图形颜色和类型变化时,原本的抽象类和实现类会导致大量类产生。通过桥接模式优化,将颜色和形状解耦,实现了更灵活的结构。
|
5月前
|
安全 Java 测试技术
Java反射机制的技术性探索
Java反射机制的技术性探索
|
5月前
|
Java
代码的魔法师:Java反射工厂模式详解
代码的魔法师:Java反射工厂模式详解
52 0
|
XML 安全 Java
教你精通Java语法之第十三章、反射
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到,那么,我们就可以修改部分类型信息;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射(reflection)机制。1. 反射的意义2. 反射重要的几个类: Class类 、Field类、 Method类、 Constructor类3. 学会合理利用反射,一定要在安全环境下使用。
54 0
【软工】原型化方法与常用动态分析方法
【软工】原型化方法与常用动态分析方法
47 0
|
安全 Java 测试技术
带你深入学习“反射”技术
带你深入学习“反射”技术
132 0
|
XML 安全 IDE
JavaSE:第十三章:一分钟了解反射
JavaSE:第十三章:一分钟了解反射
130 0
JavaSE:第十三章:一分钟了解反射
|
缓存 安全 Java
12000+字Java反射,一起全面了解Java反射机制,为学习框架铺路
12000+字Java反射,一起全面了解Java反射机制,为学习框架铺路
108 0
12000+字Java反射,一起全面了解Java反射机制,为学习框架铺路
|
Java Maven
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
|
应用服务中间件
反射知识梳理
反射知识梳理
123 0