??xml version="1.0" encoding="utf-8" standalone="yes"?>
关键字:(x)AJAX,Tree,StrutsQDOM
难易度:(x) ?BR>软g版本Qstruts 1.2.8
旉Q?006-01-27
AuthorQKino
***************************************
前阵子写了一个小代码处理AJAX下WebTree的构建,其中到了一些问题,也有一些想法,现在说出来希望大家一L(fng)看,如果案由问题请不吝赐教,本h不胜感激啊?BR>
背景Q?BR>q次因ؓ(f)是加载在Struts上的开发,W(xu)eb面上的Tree作AJAX处理Q因为有Node的增删改操作。Server端因和W(xu)ebServiceq接Q所以不做Cache?BR>
解决案:(x)
1。用Polling调用AJAX定期更新Tree?BR>2。AJAX讉K的地址是一个ActionQ例Qcreatetree.doQ。用来返回Tree模型或者错误消息(国际化)(j)?BR>3。Browser解析XML的TreeModel?BR>4。在Browser比较新旧2个TreeModelQ完成选中状态的l承?BR>5。CSS渲染TreeNode?BR>
以上是简单的思\。传l的AJAX应该是尽量减XMl传输量,q于没有Cache的缘故,q且WSl我的节点ƈ不能单的得到父子关系。我选择了,每次Polling更新整棵?wi)的?gu)。性能未测?BR>
我这ơ在web server 端构建Tree时直接用深度优先转换成XML。XMl中数据的先后序军_了Tree从父到子Q从兄到弟的深度优先关系Qindent军_了深度(也就是羃q)(j)。这h从Server端传入的也就成了一个标准的Tree昄Model。格式定义如下?BR> * Gobal Master Tree DTD
* <!ELEMENT tree (tree*)>
* <!ATTLIST tree
* id CDATA #REQUIRED LoctionInfo's toString
* indent CDATA #REQUIRED Tree's Level
* text CDATA #REQUIRED label in html
* tooltip CDATA #IMPLIED title in html
* action CDATA #IMPLIED href in html
* icon CDATA #IMPLIED close icon with the node status
* openicon CDATA #IMPLIED open icon with the node status
* open CDATA #IMPLIED> node's open states ,default is false in server.
* target CDATA #IMPLIED node's open target
*
<span id="maintree">
<tree id="Ajax" indent=0 text="Root" tooltip="Root" action="/logout.do" icon="" openicon= "" open="false"/>
<tree id="110" indent=1 text="Node 1" tooltip="Node 1" action="/logout.do" icon="" openicon= "" open="false"/>
<tree id="120" indent=2 text="Node 2" tooltip="Node 2" action="/logout.do" icon="" openicon= "" open="false"/>
<tree id="12580" indent=2 text="Node 3" tooltip="Node 3" action="/logout.do" icon="" openicon= "" open="false"/>
<tree id="user" indent=1 text="Node 4" tooltip="Node 4" action="/logout.do" icon="" openicon= "" open="false"/>
</span>
上边?Tree昄出来如下
Root
?BR> ├Node 1
?nbsp; ?BR> ?nbsp; ├Node 2
?nbsp; └Node 3
└Node 4
indent 是~进?BR>数据的先后顺序就是深度优先的遍历序?BR>
q样的数据到了BrowserQ会(x)先被转成一个对象数l?BR>
软g环境Q?/SPAN>TortoiseSVN-
l 如何下蝲CVS ?checkout
如图?/SPAN>URL of repository 输入服务器项目名U就好。(?/SPAN>IE也能看啦Q?BR>
l 如何q加新文件或者目?/SPAN> ?add
Subversion是递归q加的,省去?/SPAN>cvs?/SPAN>pythonq一步?/SPAN>
q里的追加仅仅是在本地打标记Q别忘了提交Q!Q?BR>
l 如何提交修改 ?commit
英文?/SPAN>CVS一P毕竟q?/SPAN>2个Y仉有同一个“老爸?/SPAN>(Karl)Q相q也自然?/SPAN>
是不是比CVS友好Q这?/SPAN>Clientq不错么Q? 呵呵 但这q不?/SPAN>Subversion真正的强V?BR>
l 如何撤销操作 ?clean up / revert
如果你做了不该做的事?/SPAN>?-_-! 那么恢复很重要了(当然了,q都是客L(fng)的,如果已经提交了,?/SPAN>?/SPAN>q着挨板子吧Q?/SPAN>
Clean ?/SPAN> Revert 很相q。都是撤销提交前进行的所有修攏V可以对目录作?BR>
l 如何明确目录下的变更?/SPAN> ?status
右键
l 如何删除一个文件或者目?/SPAN> ?delete
q就不说了,Delete q个东东是Q?SPAN style="COLOR: red">别忘?/SPAN> 提交Q?/SPAN>
l 如何察看一个文件的或者目录的修改记录 --- log
是?/SPAN> history 了。?/SPAN>Show Log好?/SPAN>
l 如何比较文g或者不同版本之间的比较 ?diff
如上图,得到历史版本后,可以直?/SPAN>diff了,q个Client自带?/SPAN>Compare功能。可能不?/SPAN>BC强吧Q不定?/SPAN>
l 明确提交文g时的用户权限验证
写个代码 Ҏ(gu)么。都是体力啊Q被盖了Q可不是气的嘴都歪了。所?/SPAN> 权限 理也就应历史z流Q出现在Subversion中。这个图是提交时的密码输入。具体的讄请参?/SPAN>《subversion之Apache配置?/SPAN>Q?/SPAN>
Subversion自带了一个小型的server叫做 svnserve 但是他不能完成复杂的权限目录{的理Q因此我们这ơ借用 ?/SPAN>XX ?/SPAN>Apache ServerQ?/SPAN>
W四?参?/SPAN>
《?/SPAN>Subversionq行版本控制?/SPAN> Orilly 中文
?/SPAN>Apache Securty?/SPAN> HTMLPage ApacheGroup English
kino
kinoviti@gmail.com
QQ:23493713
软g版本Qsubversion1.2.3
apache-server 2.0.55
旉Q?006-01-26
AuthorQKino
***************************************
安装到Apache
Subversion作ؓ(f)CVS的次代作品,Kerl真的是煞费苦心啊。现在我们就来看看如何配|它到ApacheServer?BR>Subversion本n有一个自带的server是bin下的cvsserve Q通过svn://XXXXq行讉K。同时支持ssh配置。但是弱点就是这个server对于权限和用L(fng)理很弱,对于大型目Q必d他挂在ApacheServerq样的重萨巴上?BR>[svnserve的用h仉要修改conf下的2个文Ӟ自己看看Q很单都有注释的Q这里不说了]
你应该得到subversion的二q制安装版,比较E_的是1.2.3版本Q这个版本对于apacheserver最低的版本要求?.0.45 所以我们可以去apache官方站点下蝲2.0.55版本Q最新已l是2.5了吧Q。分别安?个Y件?BR>ok,软g环境好了Q那来q接他们吧?BR>
数据库连接:(x)
Q如果你懒得改,那么安装软g的时候就一定要先安装ApacheServer,Subversion安装的时候会(x)自动修改Q?BR>subversion可以被看作是一个特D的数据库(事实上也是Q呵呵FSFS 和伯克利DBQ。那么就需要让Apache能够讉Ksubversion的数据库Q这qCmodule概念Q我们便来修改httpd.conf文g?BR>1。打开Apache自带的DAVmoduleQ去掉“LoadModule dav_module modules/mod_dav.so”前?
2。追加访问subversion用的moduleQ(subversion安装目录bin下自带有q?个modulesQ?BR>LoadModule dav_svn_module "C:/Program Files/Subversion/bin/mod_dav_svn.so"
LoadModule authz_svn_module "C:/Program Files/Subversion/bin/mod_authz_svn.so"
权限讄Q?/FONT>
比较ȝ(ch)的东西来了。我们需要配|?个东西:(x)
1。在httpd.conf中追?lt;Location > 。例子如下:(x)
#配置subversion用户权限
<Location /mysvn>
DAV svn
# http中输?nbsp;"/mysvn/Parser" URL will map to a repository F:/SVN/repository/Parser
SVNParentPath F:/SVN/repository/
#声明 accessfilepolicy 文gQ目的是认Group分类和目录的讉K权限
AuthzSVNAccessFile F:/SVN/commonconf/accessfilepolicy
# only authenticated users may access the repository
# Require valid-user
# For any operations other than these, require an authenticated user.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# 声明userauthofapachedav文gQ其内容是各个用L(fng)md5密码
AuthType Basic
AuthName "HFSVB AuthName"
AuthUserFile F:/SVN/commonconf/userauthofapachedav
</Location>
2。accessfilepolicy 文gQ放在项目的conf目录下,也可随意Q?如下Q?BR>#this file communicate with httpd file's Location Tag ,per file per Tag
#like svnserve.conf here section is [repos-name:path] or [path]
#if you use SVNParentPath in httpd.conf then here you MUST use repository name
#if you use SVNPath ,no problem
#r read w write
#don't have any right to parser:/src/ of user guest
#[repository名字Qpath]
#[parser:/src/]
#guest =
[groups]
administrator = admin
developer = tester
everyone = admin, tester
#default no one has right to repos,so use * to everyone
[parser:/] #根目录下所有的文g和目录,又承关p?BR>* = r #默认的所有h都有 L?BR>@developer = rw #q就表明只有developerQtesterQ才有读写权?BR>[ 具体的文件和内容可查?Orilly的《用Subversionq行版本控制?BR>讉K http://www.subversion.org.cn/svnbook/1.1/index.html ]
3。userauthofapachedav文g
admin:$apr1$A45.....$WQ0RCK61I/PO4gSKt.kK60
q个文g是如何生成的呢,使用apache 的bin目录下的htpasswd.exe。用法可以参?--help的帮助?BR>q里l一个例子吧
>htpasswd -cm C:/userauthofapachedav admin
>input password:admin123
>again : admin123
具体的英文忘了。呵呵不q很单的?BR>
好了Q就q么单。祝大家开心。这只是入门。具体的操作q要靠各位自己去感受?BR>
关于如何讄subversion的项目库Q上Ҏ(gu)到的orilly的书有记蝲?BR>
软g版本Qapache-log4j-1.2.9
旉Q?006-01-26
AuthorQKino
***************************************
呵呵 快过q了。眼看n边的朋友一个一个离开Q踏上归途,心里不免有些淡E的忧伤。ؓ(f)了消时_(d)写写文章也和久违的大家聊聊?BR>
q里先祝愿各位朋友新春快乐。在狗年旺、旺、旺旺旺?
切入正题吧。大名鼎鼎的Log4j我也理解得不深,q里采用假设的问{方式介l吧?BR>QQLog4j是个什么东西?
AQLog4j应该叫做 Log for java吧,是ApacheGroup旗下的明星项目,已经应用在很多方面了。同cȝq有针对c c++{的log4c log4XXX之类。请自己看链接:(x)
QQLog4j到底是怎么被应用得Q?BR>AQ这p从结构上说了Q首先我们应用的q不是Log4j而是Jakarta-Commons-loggingQ但是这只是一个interface包没有具体的实现Q其实是有的Q叫做SampleLog׃是快Q。所以在大火的source里你只需要面向Logging~程而无d心到底是如何生成的。因为Logging目支持很多实现q不一定是Log4j。还有JDK的Log也行啊。那我们要做的就?nbsp; 配置 Log4j到系l就好了?BR>
QQLog4j到底要配|什么东西,才能被系l识别?
AQ?个:(x)Jar?nbsp; ?nbsp; log4j配置文g?Jar我就不说了。现在来说Log4j配置文g。这个文件可以随意命名,默认的文件是 log4j.properties 。放在你的src根目录下好。比?你的source的catagory是com.yourcompany.xx那么攑֜和comq列的目录下好?BR>
QQ如果我不想用默认的log4j.properties 我应该怎么定义Q怎么做?
AQ那׃用下边的命o(h)定义Q?BR>System.setProperty(""); -_-! 具体内容想不h了,留言中补充吧?BR>如果你是Struts工程或者Web工程Q需要做一个sevlet把这D代码蝲入。重载ActionServlet的initҎ(gu)好?BR>
QQ这个文件如何定义?
AQ如下例。(具体的可以查阅JavaDocQ?BR>### direct log messages to console ###
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n
### direct messages to file gm_web.log ###
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=../logs/gm_web.log
log4j.appender.FILE.MaxFileSize=1000KB
log4j.appender.FILE.MaxBackupIndex=5
log4j.appender.FILE.Append=true
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss:SSS} %-5p %m (%F:%L) [%t]%n
# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootCategory=ERROR, CONSOLE, FILE
log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE
XML格式的定义,我就不说了,资料满天都是?BR>
QQ听说Log记录有承关p,那么多LogQ效率太低了?BR>AQ有l承关系Q对应的当然有打破l承的定义,比如上例?BR>log4j.rootCategory=ERROR, CONSOLE, FILE
log4j.logger.com.mycompany.ui=DEBUG, CONSOLE, FILE
com.mycompany.uiq承了rootCategory的Log记录U别。但是如果像破除使用additivity
log4j.additivity.com.mycompany.ui=false
KO了?BR>
QQlog4j.appender.FILE.File=yourlogfile.log 到底l我把Log攑֓MQ能改不Q?BR>AQ如果是Tomcat那就攑ֈbin下边了。能改啊Qbin是基准目录Q写相对路径好咯。如上例?BR>
QQLog4j中ConversionPattern到底都是什么意思,都怎么用啊Q?BR>AQ?如下解释
QQConversionPattern参数能去哪里参考呢Q?BR>AQJavaDoc PatternLayout cR?/P>
http://logging.apache.org/log4j/docs/api-unstable/index.html
QQLog4j?x)不会(x)太慢啊Q性能如何Q?BR>AQ这个问题不好回{。反正记录一条Log大约的时间是20ms ?400ms吧,Ҏ(gu)你ConversionPattern需要记录的格式内容Q以?qing)package catagory的承关pL军_。那么每个pattern到底哪个快哪个慢Q哪个超U慢Q请?A >http://logging.apache.org/log4j/docs/api-unstable/index.html。d一句话Q只要让log4jl你trace调用关系Q反class 别指望能快Q格谁都一P是吧?BR>
QQ下班了没,啰嗦q么多,有问题再问你吧,留下联系信息
AQ刚下班Q还吃了朋友的蛋p?他本人正在飞ZQ哈哈,吃了个独?Q回家咯。讨论问题的L(fng)a或?A href="mailto:kinoviti@gmail.com">kinoviti@gmail.com QQ:23493713
软g版本Q?/SPAN>Parasoft C++ Test 6.5
旉Q?005-11-23
AuthorQKino
********************************
一.介绍一下C++Test吧(q一部分请允许我ctrl + c/v Q?/STRONG>
是单元测试和静态分析工P自动试C?/SPAN>CQ+cd、功能或lgQ而无需~写单个试实例、测试驱动程序或桩调用。只需点击按钮Q?/SPAN>C++Test即会(x)采用业内~码标准执行代码的静态分析,试代码构造(白盒试Q,试代码功能性(黑盒试Q,q保持代码完整性(回归试Q。可以E行在Windows 2000/XP ?/SPAN>Linux ?/SPAN>Solaris 7, 8, 9q_之上。她的主要功能可以参见下边的链接|页Q?/SPAN>
http://www.superinst.com/cn/products/software_engineering/unit_testing/parasoft/ctest.html
q里我想说明的不?/SPAN>C++Test有多么好用,而是要说明她内置?/SPAN>RuleWizard™定制编码机能。那么什么才?/SPAN>RuleWizard呢?他到底能q什么?
?RuleWizard
C++Test内置?/SPAN>300多个静态测试项Q一般的情况下其实也够用了。但是如果有Ҏ(gu)的测试要求,动辄几十K的代码,用眼睛看Q脑子想Q太辛苦Q也不“安全”。那么?/SPAN>rulewizard定制自己的规则还是很有用的?/SPAN>
我们首先要明,rulewizard定制的是 不成?/STRONG> 的情c(din)也是应该被排除的?/SPAN>
Rule的创建有2U方式,一U是手工写规则,另一U是写入需要剔除的代码Q让rulewizardd你生成规则(最好别用,弱弱?/SPAN>autocreateQ。我q里主要重点攑֜自己写规则方面?/SPAN>
Rulewizard的界面如下图Q?/SPAN>
*******
?。RuleWizard界面
双的就是我们写的规则?/SPAN>
那么我们先来大概的介l一?/SPAN>rulewizard定义的基本组成部分吧。(实在不太?x)翻译,那么沿用英文名字了Q请大家多多包涵Q?/SPAN>
NodeQ规则的基本l成部分Q通过Node你可以很清楚的知道它的功能。比如表辑ּa=b、变量的cd试。。。分为:(x)
parentNodeQ规则中的主分支Node或者次分支的主Node。内容可以是表达式、变量、函数等
childNodeQ规则的l成单元?/SPAN>
CommandsQ?/SPAN>用来?/SPAN>Node?/SPAN>Nodes之间建立兌关系。Ş象一点就是点中一?/SPAN>Node然后右键昄出的快捷菜单的上半部分。如下图Q?/SPAN>
介绍一下主要的Command
Collector:集合。这个概忉|像数学中的集合而不?/SPAN>Java中的q义集合。满一定条件的数据或者方法或者变量的全体。比如,所有被声明q的变量Q?SPAN style="COLOR: red">如下?BR>
?
isDecl是用来返回前边的node是不是一个声明。那?/SPAN>body?/SPAN>membervariableq回了所有的包涵指定cd变量得语句(包括 变量付倹{声明、判断等Q那么这个图被理解ؓ(f)Q所有不是声明得语句内用的变量的集合?/SPAN>
没有被声明的变量Q?SPAN style="COLOR: red">如下?/SPAN>?BR>
?
q里的意思是所有作为声明语句的变量的集合?/SPAN>
那么通常情况下,A集合?/SPAN>B集合应该是相{的Q也是说所有被声明q的变量Q?/SPAN>B集合内容Q应该都被?/SPAN>/付?/SPAN>/判断Q?/SPAN>A集合的内容)(j)。那么对于存在声明了但没有被使用的变量的Ҏ(gu)情况应该怎么栯C呢Q?/SPAN>
Node Set:Node?/SPAN>Node集合的处理。分?/SPAN>UnionQ合qӞ(j)?/SPAN>IntersectionQ交叉)(j)?/SPAN>DifferenceQ差|左差/叛_Q?/SPAN>XorQ异或)(j)?SPAN style="COLOR: red">如下?/SPAN>Q?BR>
?
如果 满q个规则Q那么输出相应得警告信息?/SPAN>
OutputQ?/SPAN>如果满check的条Ӟ向用戯回一个消息(头表示Q?/SPAN>
三.Python
q里python是用来给rulewizard作补充的一个脚本语a。通过python可以定制一些特D的Q?/SPAN>rulewizard?/SPAN>node不能完成的规则?/SPAN>Python可以使用2U方式被加入到规则中Q?/SPAN>
作ؓ(f)一个输?/SPAN>Q如果规则没有被遵守那么可以调用一个违反规则的Ҏ(gu)。(cM于输出错误消息,只不q这里用来启动一个方法而已Q?/SPAN>
作ؓ(f)一个单独的Ҏ(gu)lgQ其实就是一个方法而已。比如,以上图ؓ(f)例子Q如果我们不判断B ?/SPAN> A的大关p,是xC?/SPAN>A?/SPAN>B的内容,那么得到如下的图:(x)
?
其中Method的内Ҏ(gu)Q?/SPAN>
def showCollectorContext(node,context):
a = context.getList("A")
b = context.getList("B")
context.report("D's Context is " + str(a) + "C's Context is " + str(b))
那么?/SPAN>c++testq行试的时候就?x)得到输出我们需要的内容?/SPAN>
关于python的语法我q里׃写了Q毕竟和q篇文章的内容美关系。如果想要了解,可以M载相兌料,我这里徏议?/SPAN> Orielly?/SPAN> Python in a Nutshell ?/SPAN>
四.不?/SPAN>
作ؓ(f)一个能自定义规则的静态测试工P不得不佩?/SPAN>parasoft兄弟们的才智。但是我觉得q有一些改善点的:(x)Q当然也不排除,已经有,但我没有发现的情况,如果各位知道h教,谢谢先)(j)
1Q?SPAN style="FONT: 7pt 'Times New Roman'"> 通过pyhon我们可以q涉规则的制定,比如Q对于上例变量的定Q如果们不?/SPAN>collect set?/SPAN>Difference|left menusQ就是图4中最下的那个6边ŞQ,而用python一L(fng)可以Ҏ(gu)2?/SPAN>List。但是就像他提供的功能是静态测试一Pq里我们得到的永q是l过处理的集合。而不能把python插入(g)的循环中,不能一ơ得C个变量,做点操作然后{下ơ的变量?/SPAN>
2Q?SPAN style="FONT: 7pt 'Times New Roman'"> 集合的概念在q里?/SPAN> 他的优点Q也有缺点,如果我们惌明确的得C码里相同变量的出现次敎ͼ那么通过现有?/SPAN>rulewizard是得不到的,因ؓ(f)我们得到的集合Ll过“合q”的、没有重复的数据l构?/SPAN>
3Q?SPAN style="FONT: 7pt 'Times New Roman'"> 我看到的资料,所有的内置?/SPAN>node都没有ؓ(f)用户提供接口。不能够把通过python的处理结果正的传递给内置?/SPAN>node。感觉所有的python做成?/SPAN>node 都是“叶子”?/SPAN>
4Q?SPAN style="FONT: 7pt 'Times New Roman'"> 技术支持和官方论坛人气低到Q看了浑w发抖的地步。没有交,没有讨论。不知道是不是因为太늚原因?/SPAN>
5Q?SPAN style="FONT: 7pt 'Times New Roman'"> 贵!Q!真的很贵。动辄就?/SPAN>4XXX$?/SPAN>-_-! 反正c(din)?/SPAN>
写q么多,希望大家多多交流Q国内关于Y件的新闻有不,l验却没有,希望能给我仍的“砖”能换来大家“玉”。谢谢!
q个是Java了,熟?zhn)吧?/P>
C++的定义如下:(x)
1.2虚函?BR>
把一个基cd数声明ؓ(f)virtualQ该函数可以在MzcM重写了?BR>Java的语法中没有virtualq个词,但是Java却彻d底的贯彻着q个概念QJava的所有函数都是虚拟的?BR>C++的朋友可能比较熟(zhn)这个词吧。对于这一点C#和C++是相同的。但是语法稍微有点不同,C#需要用overridecLC声明重写函数。如下例
1.3隐藏Ҏ(gu)
相同{的方法在基类和子c都声明了,但方法不是vitrual。那么实际中到底哪个Ҏ(gu)被执行,取决于引用实例的变量cdQ而不是实力本w的cd?BR>我们也不用太担心q个问题Q因为C#?x)在~译期给告?BR>
1.4调用U篏函数的方?BR>java中我们用superQC#中用base?BR>
1.5抽象cd抽象函数
和java一样用abstract声明?BR>和C++相比QC++的抽象函数被声明为纯虚函数?BR>
1.6密封cd密封Ҏ(gu)
在Java中我们把它叫做final。也是不能l承的类或不能重载的Ҏ(gu)?/P>
1.7构造函数的调用层次
和Java一P我就不多说了。这里强调一个特D的语法格式Q?BR>
l果如预计那?Q?BR>如果基类含有带参数的构造函敎ͼzcM能调用默认基cL造函数?BR>多参数派生类构造函敎ͼ可以调用参数数目不同的基cL造函数?BR>
我们一h看看Z么这2个结论可以成立:(x)
首先Q对于带参数的基cL造函数在初始化的时候会(x)试图去调用基c默认构造函敎ͼ但在上边的基cȝ序里Q因为只声明了带一个参数的构造函敎ͼ所以public Second(string f):base()或者public Second(string f)׃?x)通过~译Q因Z找不到基cȝ默认构造函敎ͼ只能q加public BaseClass()才会(x)通过。这一点和JAVA是不同的Qjava的默认构造函数默认是不出现在代码里的。C#却一定要写出来?BR>
<<<== 有错误。C#的默认构造函C制和Java是一L(fng)。具体如下:(x)
1。父cL有自定义构造函数的情况下,使用默认构造函数。用户可以不写出来?BR>2。一旦父cL了自定义的构造函敎ͼ那么如果要用无参的默认构造函数就必须要显C定义?/FONT>
其次Q下Ҏ(gu)生类1个参数?个参数甚臛_个参数的构造函Cؓ(f)什么能讉K只有一个参数的基类构造函数呢Q原因是Q关键字thisQ上边的E序改写如下我想大家明白了?BR>
2.1修饰W?BR>C#支持下边的集中修饰符Q?BR>public Q?nbsp; protected Q?internal Qprivate Q?protected internal
同Java。internal和protected internal?net framework新增的一个内宏V根据定义?BR>internal在同一个程序集内和publiccMQ不同的E序集间Qpublic声明的类或方法仍然可用,但是internal的方法或cd被隐藏?BR>protected internal合ƈ了protected 和internalQ但q是一Uor关系Q而不是and关系。protected internal成员在同一个程序集的Q何代码都可见Q在zcd见?BR>
2.3接口
接口公约Q?BR>不能实例化接口?BR>接口不能有构造函数或字段?BR>接口定义也不允许包含q算W重载?BR>接口定义中还不允许声明成员上的修饰符。接口成员都是public的,不需要static也不需要virtual?BR>
同Java
接口可以彼此l承Q其方式和类l承相同。如下:(x)
告一D落吧?nbsp; (つづ?请多提意见,如果有什么不清楚的地方也请你写下来,一赯查咯?nbsp;