在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:
System.Reflection命名空间
(1) AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器
(2) Assembly:程序集类
(3) Module:模块类
(4) Type:使用反射得到类型信息的最核心的类
他们之间是一种从属关系,也就是说,一个AppDomain可以包含N个Assembly,一个Assembly可以包含N个Module,而一个Module可以包含N个Type. AppDomain这个类我们等下再来讲解。我们先关注Assembly个类,在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是Load,LoadFrom和LoadWithPartialName三个Assembly的静态方法.
先来讲解Assembly.Load方法,该方法会有多个重载版本,其中一个就是提供程序集的详细信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记,全部都是以一个字符串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
那么,使用Assembly.Load加载程序集的顺序是怎样的呢?首先它会去全局程序集缓存查找,然后到应用程序的根目录查找,最后会到应用程序的私有路径查找。
当然,如果你使用的是弱命名程序集,也即只给出程序集的名称,那么这个时候,CLR将不会在程序集上应用任何安全或者部署策略,而且Load也不会到全局缓存程序集中查找程序集。
Assembly.Load("")的使用说明如下;
并不是命名空间。常用的是程序集名称,也就是dll的名称
重载列表
名称 说明
Assembly.Load (AssemblyName) 在给定程序集的 AssemblyName 的情况下,加载程序集。
由 .NET Compact Framework 支持。
Assembly.Load (Byte[]) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。将该程序集加载到调用方的域。
Assembly.Load (String) 通过给定程序集的长格式名称加载程序集。
由 .NET Compact Framework 支持。
Assembly.Load (AssemblyName, Evidence) 在给定程序集的 AssemblyName 的情况下,加载程序集。使用提供的证据将该程序集加载到调用方的域中。
Assembly.Load (Byte[], Byte[]) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。
Assembly.Load (String, Evidence) 通过给定的程序集的显示名称来加载程序集,使用提供的证据将程序集加载到调用方的域中。
Assembly.Load (Byte[], Byte[], Evidence) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。
关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有
注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
Assembly.Load("程序集名")
Assembly.LoadFrom("程序集实际路径")
在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:
System.Reflection命名空间
(1) AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器
(2) Assembly:程序集类
(3) Module:模块类
(4) Type:使用反射得到类型信息的最核心的类
他们之间是一种从属关系,也就是说,一个AppDomain可以包含N个Assembly,一个Assembly可以包含N个Module,而一个Module可以包含N个Type. AppDomain这个类我们等下再来讲解。我们先关注Assembly个类,在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是Load,LoadFrom和LoadWithPartialName三个Assembly的静态方法.
先来讲解Assembly.Load方法,该方法会有多个重载版本,其中一个就是提供程序集的详细信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记,全部都是以一个字符串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
那么,使用Assembly.Load加载程序集的顺序是怎样的呢?首先它会去全局程序集缓存查找,然后到应用程序的根目录查找,最后会到应用程序的私有路径查找。
当然,如果你使用的是弱命名程序集,也即只给出程序集的名称,那么这个时候,CLR将不会在程序集上应用任何安全或者部署策略,而且Load也不会到全局缓存程序集中查找程序集。
Assembly.Load("")的使用说明如下;
并不是命名空间。常用的是程序集名称,也就是dll的名称
重载列表
名称 说明
Assembly.Load (AssemblyName) 在给定程序集的 AssemblyName 的情况下,加载程序集。
由 .NET Compact Framework 支持。
Assembly.Load (Byte[]) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。将该程序集加载到调用方的域。
Assembly.Load (String) 通过给定程序集的长格式名称加载程序集。
由 .NET Compact Framework 支持。
Assembly.Load (AssemblyName, Evidence) 在给定程序集的 AssemblyName 的情况下,加载程序集。使用提供的证据将该程序集加载到调用方的域中。
Assembly.Load (Byte[], Byte[]) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。
Assembly.Load (String, Evidence) 通过给定的程序集的显示名称来加载程序集,使用提供的证据将程序集加载到调用方的域中。
Assembly.Load (Byte[], Byte[], Evidence) 加载带有基于通用对象文件格式 (COFF) 的图像的程序集,该图像包含已发出的程序集。
关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有
注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
Assembly.Load("程序集名")
Assembly.LoadFrom("程序集实际路径")
|
1、收藏本站
2、设为首页 <span onclick="var strHref=window.location.href;this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.pfan.80.hk');" style="CURSOR: hand">设为首页</span> 3、去掉超链接的下划线 <style TYPE="text/css"> 4、点击即可刷新本页 <a href="location.reload()" target="_self">刷新</a> 5、用户离开时启动收藏夹 第一步:把如下代码加入<head>到</head>区域中 第二步:把<body>中内容改为:
6、JS发送邮件 以下代码加入<head>区域: <SCRIPT LANGUAGE="JavaScript"> <!-- This script and many more are available free online at --> <!-- Begin 以下代码加入<body>区域: <a href='javascript:mailsome1()'>发送Email给某人!</a> 2. <A HREF="mailto:xxx@xxx.com">xxxxx</a>
7.JS时间 <script language="javascript"> <span id=jnkc></span> 8.js复制代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 直接复制url <input name=myimg type=hidden id=myimg value="http://pmp.cnblogs.com" /> 以下是代码片段:<br /> </p> 网页在线发送电子邮件JS代码 以下代码加入<head>区域: <SCRIPT LANGUAGE="JavaScript"> <!-- This script and many more are available free online at --> <!-- Begin 以下代码加入<body>区域: <a href='javascript:mailsome1()'>发送Email给某人!</a> |
今天工作中遇到JavaScript 中的一个 this.x!=“1”希望以后再有碰到this.这样的关键字能明白是怎么回事
如图:
下面的列举当然不是图中的,也是我收集到的一点简单的讲解。便于大家理解应用。
this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,
function test(){
this.x = 1;
}
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
下面分四种情况,详细讨论this的用法。
情况一:纯粹的函数调用
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
请看下面这段代码,它的运行结果是1。
function test(){
this.x = 1;
alert(this.x);
}
test(); // 1
为了证明this就是全局对象,我对代码做一些改变:
var x = 1;
function test(){
alert(this.x);
}
test(); // 1
运行结果还是1。再变一下:
var x = 1;
function test(){
this.x = 0;
}
test();
alert(x); //0
情况二:作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
function test(){
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
情况三 作为构造函数调用
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
function test(){
this.x = 1;
}
var o = new test();
alert(o.x); // 1
运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
var x = 2;
function test(){
this.x = 1;
}
var o = new test();
alert(x); //2
运行结果为2,表明全局变量x的值根本没变。
情况四 apply调用
apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
var x = 0;
function test(){
alert(this.x);
}
var o={};
o.x = 1;
o.m = test;
o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
o.m.apply(o); //1
运行结果就变成了1,证明了这时this代表的是对象o。

今天改shtml模板页时遇到问题,用到#include file 和 #include virtual 在这区别下以方便新手查阅。
|
#include file 和 #include virtual的区别,介绍这方面的文章也有不少,在此将二者的区别再总结一下,仅供参考:
1。#include file 包含文件的相对路径,#include virtual包含文件的虚拟路径。 2。在同一个虚拟目录内,<!--#include file="file.asp"-->和<!--#include virtual="file.asp"-->效果是相同的,但假设虚拟目录名为myweb,则<!--#include virtual="myweb/file.asp"-->也可以通过调试,但我们知道<!--#include file="myweb/file.asp"-->是绝对要报错的。 3。如果一个站点下有2个虚拟目录myweb1和myweb2,myweb1下有文件file1.asp,myweb2下有文件file2.asp,如果file1.asp要调用file2.asp,那么在file1.asp中要这样写:<!--#include virtual="myweb2/file2.asp"-->,在这种情况下用#include file是无法实现的,用<!--#include file="myweb2/file2.asp"-->必然报错。相反,在myweb2的文件中包含myweb1中的文件也是一样。如果该被包含文件在某个文件夹下面,只要在虚拟路径中加上该文件夹即可。 4。不论用#include file 还是 #include virtual,在路径中用“/”还是“\”或者二者交叉使用都不会影响编译效果,程序会顺利执行。 5。以上情况不适用于2个站点文件的相互调用,而且在同一个站点内,<!--#include file="file.asp"-->和<!--#include virtual="file.asp"-->等效,但假设站点名为website,使用<!--#include virtual="website/file.asp"-->是错误的。 |
最近在做调用SHtml模板生成静态页面的项目二次开发,找了点相关的资料。自己也在研究
生成sHTML静态页面,同时调用模板,便于修改。
过程如下:
<%
Action=Trim(Request("Action"))
'变量ACTION=1为新增,ACTION=0为修改
title=Trim(Request("title"))
content=Trim(Request("content"))
'....更多内容来源
if Action=0 then
'修改sHTML文件
id=Trim(Request("id"))
'指定修改的文章
response.buffer=true
Response.Expires=0
'清除缓存
set rs=server.createobject("adodb.recordset")
sql = "Select url From Docs where id="&id
rs.Open sql,conn,1,1
if not(rs.eof and rs.bof) then
filepath =rs("url")
'读取文章路径
end if
StaticFilePath = filepath
'设定另一变量后用。
filepath=replace(filepath,".shtml","")
'转换文件名后缀
filepath="/a/"&filepath
'得到完整文件路径
else
'生成新sHTML文件
d=year(date())&month(date())&date(date())
t=hour(now())&minute(now())&second(now())
randomize
'使用系统计时器来初始化乱数产生器
t=rnd(t)
StaticFilePath= d &"/"& d & t &".shtml"
folder = "/a/"& d &"/"
'存储在数据库中的路径,文件夹a为自定
filepath = folder&t
'得到完整文件路径
end if
'保存数据到数据库
set rs=server.createobject("adodb.recordset")
sql = "Select * From ......"
'.............
'过程不是这部份的,省略
ContentStr=split(Content,"|||")
'查找内容中的分页符
PageNumber=ubound(ContentStr)
For p = 0 to ubound(ContentStr)
Dim fso,fin
'创建文件系统对象
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Model="/a/Template/index.shtml"
'sHTML模板文件路径
Set fin=fso.OpenTextFile(Server.MapPath(""&Model&""))
mb_code=fin.ReadAll
fin.close
'打开模板代码,
' REM 转换其中特殊代码转变为接受值 开始
mb_code=replace(mb_code,"$$Pagename$$",Pagename)
mb_code=replace(mb_code,"$$Title$$",Title)
mb_code=replace(mb_code,"$$Posttime$$",now())
mb_code=replace(mb_code,"$$PinlunContent$$",PinlunContent)
mb_code=replace(mb_code,"$$Content$$",ContentStr(p))
if PageNumber>0 then
If p = 0 and p < PageNumber Then
'分页数大于一时
'生成图片翻页链接 开始
MyPagerTable="<div align=center><a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")
ElseIf p = 1 and p < PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a> <a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&".shtml")
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")
Elseif p = 1 and p = PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&".shtml")
Elseif p = PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&"_"&p-1&".shtml")
else
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a> <a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&"_"&p-1&".shtml")
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")
End If
'生成图片翻页链接 结束
mb_code=replace(mb_code,"$$MyPager$$",MyPagerTable)
'转换分页代码
else
mb_code=replace(mb_code,"$$MyPager$$","")
'只有一页时,分页代码为空
end if
'开始生成sHTML页面
On Error Resume Next
'容错处理
if Action=0 then
Set fs = Server.CreateObject("Scripting.FileSystemObject")
if p=0 then
File = Server.MapPath(filepath&".shtml")
else
File = Server.MapPath(filepath&"_"&p&".shtml")
end if
On Error Resume Next
' 若有错误依然向下执行
fs.DeleteFile File, True
end if
fso.CreateFolder(Server.MapPath(folder))
if p=0 then
Set fout = fso.CreateTextFile(Server.MapPath(filepath&".shtml"))
else
Set fout = fso.CreateTextFile(Server.MapPath(filepath&"_"&p&".shtml"))
end if
fout.WriteLine mb_code
fout.close
next
Response.Write("完成任务。")
%>
关于模板文件index.shtml的内容按HTML设计好即可,注意要转换的内容中使用转换标识符。
shtml文件可使用include file包含另一文件,但不能运行ASP等动态内容
