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

在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 = "";

            ucBase.ShowData();

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

1、不仅可以加载算法,还可以加载控件。

2、可以让表单更灵活的组合,更容易的实现控件级别的复用。

3、可以实现不用编译就可以修改程序。可以利用“代码前置”的功能,把 ShowData() 的实现的代码写在 .ascx文件里面,这样修改之后不用编译就可以看到修改后的效果了。在一些特殊的情况下会用到。

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?

  既然见到了公司,我们可以定义一个Class Company ,那么我们见到了字段,是不是也可以定义一个Class ColumnInfo呢? 公司的描述信息类...

26090
来自专栏chafezhou

程序员探案之被吃掉的串口数据

19540
来自专栏小狼的世界

使用YUI3创建Popup弹出层

很多互联网的项目应用中,弹出层出现的越来越多,使用YUI3可以快速的实现制作弹出层的效果。

9510
来自专栏谭伟华的专栏

Vue 组件开发实践之 scopedSlot 的传递

在使用Vue开发我们的vhtml-ui的组件库的过程中遇到了组件嵌套组件时需要传递scopedSlot的情况,官方的文档和教程目前还没有比较明确的指引,所以摸着...

4K20
来自专栏Flutter&Dart

Flutter之MaterialApp使用详解

1.6K30
来自专栏雨过天晴

原 荐 PHP 在 Console 模式下的

18410
来自专栏葡萄城控件技术团队

AngularJS:如何使用自定义指令来取代ng-repeat

引言 本文主要介绍了另一种即具有与ng-repeat 一样处理大量数据的绑定的功能,又具有超高的性能。 对于处理小数量,ng-repeat是非常有用的,但是如果...

21770
来自专栏ytkah

整理的dedecms标签大全,方便查找

  平时用dedecms开发经常会用到一些标签,特别是首页、栏目页、内容页,这些页面都会用到标签的调用,比如title、keywords、description...

29850
来自专栏Android知识点总结

Android基于TCP的五子棋双人对战实现

20420
来自专栏IMWeb前端团队

组件化开发--实践记录与总结

组件的规范可在组件实现时通过代码风格和格式来约束,也可通过基类扩展来强制规范。所以,当组件都是通过同一个基类扩展而来时,在那个基类上就可以很方便地统一组件规范,...

28170

扫码关注云+社区

领取腾讯云代金券