生命如此短暂,掌握技艺却要如此长久

风流不在谈锋胜, 袖手无言味最长。**_** 莫言大道人难得,自是功夫不到头。

最新评论

你的理解比较牵强, 特别是“。。。把D类型的d转换为C类型的c了。。。”。最关键的是理解编译时和运行时的不同,以及虚函数的意义。
整个运行过程中并没有发生任何的类型转换。
C到B的转换,只是欺骗编译器,使其链接不同的函数。
D到C,B到A的转换在此程序中没有任何意义。此种类型转换是用来欺骗编译器的类型检查。
类和内嵌类的关系就好像 人类和胳膊的关系
父类和子类的关系就是 爸爸和儿子的关系(个人理解)
re: IsDbNull 方法的用法 kaixin110 2007-05-31 11:53  
VB.NET IsDBNull
如果第一個條件成立﹐它還會判斷第二個條件
以前我也认为是发生装箱操作,但查了些资料后发现并不是这样。
系统对一些值类型转换为对象内置了一些方法,相当于装箱操作的内存分配,所以并不是装箱操作。
我觉得应该会吧?因为char类型是值类型,是在栈上面的,如果变成string,势必会转到堆上,执行装箱操作的。
不知道啊 呵呵
re: 关于嵌套事务的一种处理方法 拼命郎 2007-02-27 13:03  
先前那个表示的不清楚,现在修改了一下,@tempTranCount只是个在当前存储过程中记录进入事务的层数的变量,所以是局部的;必须通过和全局变量 @@TranCount 进行比较才能判断是否是提交这个事务。
第一段代码确实是会出现那样的错误,当最里层事务出现错误而回滚后,是将先前所有进入的事务都回滚,而不是只回滚最内层的事务,所以后面再有提交事务的操作会报告没有需要提交的事务。
当然这段代码只是在解决多层事务嵌套,并且内层事务有些出错情况并不需要回滚的情况下才有必要的。可能不太符合事务的原始定义了,但是这种需求是存在的,所以利用事务这种机制实现了这样一种方法,虽然已经不太符合事务的基本定义了。
你最后的代码是不是要分到不同的存储过程写啊,不过那样的话@tempTranCount是局部变量无法在不同的存储过程中共用

另外,如果那段代码写成t-sql,我发现无法出现
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 1, current count = 0.
可以在t-sql中试试这个

Begin Transaction
begin
Begin Transaction
Rollback Transaction
end
Commit Transaction
re: 关于嵌套事务的一种处理方法 KING[匿名] 2007-02-01 11:38  
呵看看CS的代码就明白怎么弄了.
re: 关于嵌套事务的一种处理方法 拼命郎 2006-10-12 21:40  
最近又学习了一遍一般程序设计中的结构化异常处理,感觉数据库这个回滚与异常处理有些相通之处。现在觉得回滚前触发回滚的事件处理其实就是异常处理,不过sql语言没有那么强大的处理方法,需要自己构造,上面这个小东西其实就是有点模仿异常处理了。
兄弟,是怎么解决的,给讲讲,给我发一份。liuyin1103@yahoo.com.cn
不是,多态是一个方法(基类)访问不同对象的同一方法的实现

重载是一个方法访问同一对象的同名方法的不同实现
re: IsDbNull 方法的用法 sswv 2006-02-22 01:11  
我这一篇,也来看看:http://blog.sina.com.cn/u/53773b5f01000153
能共享一下源码看看吗?谢谢!
unicheer@163.com
谢了,今天一同事也给出了这种误解产生的原因,我顿感醒悟,在这也感谢他。
他说可能是人们把方法的重载(overload)和覆盖(override)搞混了,重载方法必须有不同的方法签名,也就是根本就不是同一个方法的不同实现,而是不同方法者不过名字一样而已。覆盖是对一个方法的重写,如子类继承父类时子类对父类某些方法的覆盖。
重载!=多态
关键点是晚邦定,虚函数是典型的多态 virtual
多态是指在基类中定义的属性和服务为其子类继承后,可以具有不同的数据类型或表现出不同的行为,即不同层次的类可以共享一个方法(操作)的名字,但是却有各自的不同的实现。
查了好多资料也没个权威的说法,看来只能就当是了,慢慢再体会吧
我也听说好像是,但不肯定,就当是吧,本来多态就是“多态”不要限制得太死了,^_^