反射的另类实现。(不知道这么用还算不算反射了?)
在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 来达到复用的效果。
- Uploadify的一点总结
- 自动驾驶时代,中国移动要以怎样的姿势进入?
- JQuery中文日期控件
- Silverlight中的帧
- 窗口自动弹出浏览器显示广告的问题
- Instagram 开源用于 Python 3的MonkeyType 工具
- 拼凑了几个自定义的Panel(包括FishEyePanel,WrapPanel等几个常用的布局)
- jquery获取父级一级节点的序号
- Docker容器学习梳理--基础知识(2)
- Blend生成的TransformGroup如何引用?
- 今日头条写新闻机器人获吴文俊人工智能科技发明奖
- Docker容器学习梳理--应用程序容器环境部署
- 异步方式访问网页
- Silverlight:利用Panel实现自定义布局
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Yii框架getter与setter方法功能与用法分析
- laravel框架中视图的基本使用方法分析
- laravel5 Eloquent 实现事务方式
- Laravel 微信小程序后端搭建步骤详解
- Laravel使用swoole实现websocket主动消息推送的方法介绍
- Laravel框架Eloquent ORM删除数据操作示例
- PHP常用函数之base64图片上传功能详解
- laravel-admin 实现在指定的相册下添加照片
- Laravel框架Eloquent ORM修改数据操作示例
- PHP常用函数之格式化时间操作示例
- 在phpstudy集成环境下的nginx服务器下配置url重写
- 关于laravel-admin ueditor 集成并解决刷新的问题
- PHP常用函数之根据生日计算年龄功能示例
- Laravel 之url参数,获取路由参数的例子
- PHP call_user_func和call_user_func_array函数的简单理解与应用分析