重命名错误怎么没有检测到呢?

lingyun410 2008-11-26 03:01:23
刚刚在写程序的时候不小心把类的名称给重定义了,结果没有报错,害我找了半天错误,差点把脑子都搞炸掉!
我在这个演示程序中使用了IsObject()来检测类的状态
 Option Explicit
Dim CNode,MenuValue
MenuValue=LCase(Request("Menu"))
Set CNode=New Main_Cls
Response.Write "<a href=""http://www.cnode.cn/blog/article.asp?id=123"">查看说明页面</a>"
Select Case MenuValue
Case "":Call Main()
Case "edit":Call Edit()
Case "saveok":Call SaveOK()
End Select
Set CNode=Nothing
Private Sub Main()
Response.Write "<a href=""?Menu=Edit"">编辑页面</a>"
End Sub
Private Sub Edit()
With Response
.Write "对象状态:"&IsObject(CNode)
.Write "<form action=""?Menu=SaveOK"" method=""post"">"
.Write "<input type=""submit"" value=""转向SaveOK"" />"
.Write "</form>"
End With
End Sub
Private Sub SaveOK()
Response.Write "对象状态:"&IsObject(CNode) '在这里会返回False
Response.Write "在这句的下面有重定义变量"
Dim CNode '是由于这里引起的
End Sub
'在程序中这个类是放在一个单独的文件中的,为了看的方便就直接放在这里了
Class Main_Cls
Private Sub Class_Initialize()
End Sub
Private Sub Class_Terminate()
End Sub
'这里就什么都不写了
End Class

程序的演示页面地址:http://www.cnode.cn/Lab/Asp/WhyOptionExplicit
详细说明:http://www.cnode.cn/blog/article.asp?id=123
哪位兄弟知道具体原因?
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyun410 2008-11-26
  • 打赏
  • 举报
回复
晕死,把作用范围给忽略了 ^_^
谢谢大家,才反应过来,把这基础的东东给忘了,哎,脑子锈了!~
smartcatiboy 2008-11-26
  • 打赏
  • 举报
回复
没有重命名,这是作用范围不同的2个变量

在编译时,同名定义在不同的作用范围内会作为不同的变量,在使用时,优先试用本范围定义变量。这时合法的。

为避免混淆,最好的解决的办法是
1、规范命名,全局采用G_开头,类中使用M_开头
2、在全局范围只定义全局变量、类和调用主函数,不要写代码,像你上面的代码的可以改成

Option Explicit

dim g_全局变量1,g_全局变量2
class CAFEFSF
end class
main

'================
sub main()
Dim CNode,MenuValue
MenuValue=LCase(Request("Menu"))
Set CNode=New Main_Cls
Response.Write "<a href=""http://www.cnode.cn/blog/article.asp?id=123"">查看说明页面</a>"
Select Case MenuValue
Case "":Call Main()
Case "edit":Call Edit()
Case "saveok":Call SaveOK()
End Select
Set CNode=Nothing
end sub
hebhd 2008-11-26
  • 打赏
  • 举报
回复
不郁闷了吧..


你的第一个Cnode 与第二个 Cnode 完全是两个概念的东西啦
hebhd 2008-11-26
  • 打赏
  • 举报
回复
其实这个是因为变量的作用范围的问题

<%
Option Explicit
Public CNode,MenuValue
CNode="10"
MenuValue=LCase(Request("Menu"))
Select Case MenuValue
Case "":Call Main()
Case "edit":Call Edit()
Case "saveok":Call SaveOK()
End Select
Private Sub Main()
Response.Write "<a href=""?Menu=Edit"">编辑页面</a>"
End Sub
Private Sub Edit()
With Response
.Write "CNode:" & CNode
.Write "对象状态:"&IsObject(CNode)
.Write "<form action=""?Menu=SaveOK"" method=""post"">"
.Write "<input type=""submit"" value=""转向SaveOK"" />"
.Write "</form>"
End With
End Sub
Private Sub SaveOK()
Dim CNode '是由于这里引起的
CNode="20"
Response.Write "对象状态:"&IsObject(CNode) & CNode '在这里会返回False
Response.Write "在这句的下面有重定义变量"
End Sub

%>

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧