base(id)就是调用父类的带有id参数的构造函数。
C#里面的this和base 跟JAVA里面的this和super是一样的。你在定义一个变量的时候有一个this引用,指向自身,还有一个引用base,指向父类。关于你说的那种情况就是我说的第一种,如果子类成员有和父类成员同名的时候,就必须用this和base区分。
dimred
好处:
业务逻辑可以和打点逻辑分离
打点更灵活
防止漏打的情况
发包以后可以新增打点:
实现原理:
(TalkingData灵动分析技术揭秘(下))
>
首先得建一个表,当然,如果你的表中就已经建好目录的话,那这一步可以省略了。但有一点要提醒:这个表是我这个例子的使用依据(不知道这样说对不对)。
由于我用的表是ACCESS的,所以建表就不说了,只列出这个两个表的相应的字段名(数据库名:dbmdb):
表名:type_tree ――父类
字段:type_id(自动编号) type_name(类别名称)
表名:s_type ――子类
字段:id(自动编号) s_name(子类别名称) type_id(父类ID)――与父类表相对应
现在是建立数据库连接:
Dim conn, connStrSet conn = serverCreateObject("ADODBConnection")connStr = "Provider = Microsoftjetoledb40;"connStr = connStr & "Data Source = " & servermappath("dbmdb")ConnOpen connStr
以上代码应当不用再解释了吧,都是大家常用的代码。。
现在进入实质性的 *** 作:)
二级关联菜单一般情况下都是以下拉菜单来做,这里我也不例外,一样用下拉菜单来做。
只不过这里有一个地方不一样哦。
就是一个用的是跳转菜单,这一点很重要,成功与否全看这个菜单有没有用对!
以下是这个跳转菜单的代码!
<select name="first" onChange="MM_jumpMenu('parent',this,0)">
<%
sql = "select [type_id],[type_name] from [type_tree]"
set rs = connexecute(sql)'取得父类的ID及名称
if rseof or rsbof then
responsewrite "<option>-----</option>" '如果没有记录,就显示-----
else
while not(rseof or rsbof) '有记录,就将父名称列出来,形成下拉。
responsewrite ("<option value='sec=" & rs(0) & "'")
if cstr(rs(0)) = requestquerystring("sec") then
responsewrite "selected"
end if
responsewrite (">" & rs(1) & "</option>")
rsmovenext
wend
rsmovefirst '将游标移到第一条,以备下面之用。
end if
%>
</select>
哦,对了,还有一段代码忘了贴出来了,这个是跳转菜单的关键啊,看我粗心的!
补上补上:
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_jumpMenu(targ,selObj,restore){ //v30
eval(targ+"location='"+selObjoptions[selObjselectedIndex]value+"'");
if (restore) selObjselectedIndex=0;
}
//-->
</script>
以上代码贴到<head>里,是DW生成,我看不太懂什么意思,所以不注解了:D
现在是菜单的二级部分,这里不是用跳转菜单,只是一个列表罢了,所以代码跟上面的跳转菜单也就差一个onchange这个函数。
以下是这个菜单的代码,由于循环跟判断相对上面来说复杂一些,大伙要看清楚一点哦。
<select name="second">
<%if rseof or rsbof then
responsewrite ("<option>--------</option>")
else
if requestquerystring("sec") = "" then '获取跳转之后的sec值
temp=rs(0) 如果为空,就把temp的值设为第一条记录的值
else
temp = requestquerystring("sec") '否则就为收到的值
end if
subsql = "select [s_name] from [s_type] where type_id='"&temp&"'"
set subrs = connexecute(subsql) '列出一切资料为temp的记录
if subrseof or subrsbof then
responsewrite ("<option>-----</option>")
'如果没有记录,则在这个列表中显示"-----"
else
while not(subrseof or subrsbof)'否则就用循环列出一切符合条件的记录。
responsewrite ("<option value=" & subrs(0) & ">" & subrs(0) & "</option>")
subrsmovenext
wend
end if
end if
'关闭所有的记录集
subrsclose
set subrs = nothing
rsclose
set rs = nothing
connclose
set conn = nothing
%>
</select>
到现在为止,已经将这个二级菜单的制过程做完了。
现在你的里面只分了两个类。其实这个表可以做无限级分类。输出用递归实现。正好我这几天研究了这个。代码写给你。
$result = mysql_query("select from tmodule_conf order by ModuleId");//首先我们把各个分类的值保存在一个二维数组中,在下面的递归函数里有用。
while($row = mysql_fetch_object($result)){
$arr[] = array($row->ModuleId,$row->SubModuleId,$row->ModuleName);//每行保存一个分类的ModuleId,SubModuleId,ModuleName
}
###########普通显示分类####################
function fenlei($SubModuleId=-1,$str){ //$f_id初始化为0,也就是从最大分类开始循环
global $arr; //声明$arr为全局变量才可在函数里引用。
for($i=0;$i<count($arr);$i++){ //对每个分类进行循环。
if($arr[$i][1]==$SubModuleId){ //$arr[$i][1]表示第$i+1个分类的SubModuleId的值。开始$SubModuleId=-1,也就是把SubModuleId=-1的分类输出来。
echo $str"--"$arr[$i][2]"<br>"; //$arr[$i][2]表示第$i+1个分类的name的值。
fenlei($arr[$i][0],$str" "); //$arr[$i][1]表示第$i+1个分类的id的值。进行递归,也就是把自己的ModuleId作为SubModuleId参数把自己的子类再循环出来。
}
}
}
//调用例子
fenlei(-1," ");
这问题很有趣哦!很多公司面试经常提到!有三种办法:
1父类子类都各自建表(不推荐)
2子类父类同在一张表(推介)
3还有一种做法记不清了。
下面说说第二种做法吧!
你可以在数据库中建一张表都拥有以上的字段,然后在hibernate配置文件里配置一对多的关系,自己类对自己类做一对多的关联,具体配置你可以在一些论坛网站上搜到的。然后查询时你只要按id=父类的那个id去查一遍就全出来了
以上就是关于C#中继承base(id)是个什么意思全部的内容,包括:C#中继承base(id)是个什么意思、自动化打点初探、dw中怎么制作二级子页面等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)