一道.NET虚函数笔试题分析
1.代码分析 C.F()省略了new关键字,C.F()隐藏了B.F(),而D.F()重写了C.F()。 2.结果分析 ①.调用a.F(),发现A.F()是一个虚函数,查找发现D.F()不是它的重写,向上找C.F()也不是,直到B.F()才是,输出B.F; ②.调用b.F(),直接输出B.F; ③.调用c.F(),发现C.F()是一个虚函数,查找发现D.F()是它的重写,输出D.F; ④.调用d.F(),直接输出D.F;
1.代码分析 C.F()省略了new关键字,C.F()隐藏了B.F(),而D.F()重写了C.F()。 2.结果分析 ①.调用a.F(),发现A.F()是一个虚函数,查找发现D.F()不是它的重写,向上找C.F()也不是,直到B.F()才是,输出B.F; ②.调用b.F(),直接输出B.F; ③.调用c.F(),发现C.F()是一个虚函数,查找发现D.F()是它的重写,输出D.F; ④.调用d.F(),直接输出D.F;
写了一个函数获取Access表中指定用户Id,要求当传入的用户名不存在时,则在表中新增一条记录并返回Id。 经测试,当用户不存在时,执行上边代码后Access表中总会新增两条一样的记录: 改用SQL Server数据库不会有上述问题,经多次测试又发现,若在"return GetUserId(name);"处设置断点,稍停一会也不会出现上述问题。最终代码修改如下运行正常:
VS2008自带了一个"输出"窗口,在控制台应用程序调试阶段,可以把一些调试信息输出到这个窗口中,而不是输出到控制台界面。 测试代码 效果预览 补充说明 .打开"输出"窗口:在VS2008菜单中选择"视图→输出"即可打开"输出"窗口; .当项目配置为Debug时,Debug和Trace的消息都能输出;当项目配置为Release时,只有Trace的消息能输出;
conn.snippet: cmd.snippet: adapter.snippet:
方式一:使用系统DSN 方式二:使用连接字符串
一、配置ODBC数据源 二、.NET使用ODBC连接SQL Server2005示例 三、补充说明 .在配置ODBC数据源时,建议将要访问的库指定为默认数据库,或在数据库连接字符串中指定要访问的库: 否则,当要访问的表不在用户默认数据库(由服务器配置)时,程序会出错: ERROR 对象名 'MSG_Inbox' 无效。 .不能改用SqlConnection、SqlCommand对象来连接访问ODBC数据源,出错提示: 不支持关键字: “dsn”。
手上有50个txt文件需要合并成一个txt文件,每个txt大小在35M左右,以前收集的一个文本合并工具不好用,于是用C#写个工具来完成。在编码过程中产生了几个疑问,不确定对合并效率有无影响,便做了一些测试。 疑问一:目标文件始终打开和多次打开对文件合并时间有无影响? 文件合并思路为逐个打开原始文件,读取到一个字节数组进行缓存,然后将字节数组的内容存储到目标文件中,这边有个疑问:目标文件始终打开和需要写入时再打开(多次打开),对文件合并时间有没有影响?下边为测试过程。 1.测试代码 方法一:始终打开目标文件 方法二:多次打开目标文件 2.测试步骤 记录下合并每个文件所需的时间(单位:毫秒),每个方法各测十次。…
下边代码用4个字节在文件中保存了一个数字(0xAABBCC): 按正常理解,文件内容应是这样: 00 AA BB CC 所以,当按字节读取并进行转化时应是这样: 显示结果为:0xCCBBAA00,和原先的0xAABBCC不一样,为什么呢?用UltraEdit打开1.txt,可以看到实际保存为: 所以正确读取转化方法应为: 测试下: 这回正常了。 为什么文件中保存的是CC BB AA 00,而不是00 AA BB CC呢? 用Reflector查看BinaryWriter.Write(int value)方法,代码如下: 例如上边例子,经方法拆分后,this._buffer=0xCC、this._buffer=0xBB、this._buffer=0xAA、this._buffer=0,所以才会出现我们上边看到的结果。…
这个类原本存在于一个外包项目上,是外包公司写的,感觉比较不错,于是把它提取了出来。 一、缓存基类BaseCache 二、具体缓存类及其实体类 使用示例: 当存在多个具体的缓存类时,有时需要对缓存进行更新等,一个个去调用Clear方法比较麻烦,这时可以新建一个缓存管理类。 三、缓存管理类DataCacheTaker 使用示例:
在上边代码中,因为其他程序要使用ExecuteReader方法返回的SqlDataReader对象,所以我们不能调用Close方法关闭conn,否则程序会出错: 阅读器关闭时尝试调用 Read 无效。 但这样会带来新的问题,因为conn没有关闭,结果会导致创建的数据库连接没有及时关闭,最终使连接池达到最大值!或许微软正是考虑了这个问题,所以创建了枚举CommandBehavior,它允许在后续的代码中关闭SqlDataReader对象时,也一起关闭其关联的SqlConnection对象,使用方法如下: 一、CommandBehavior.CloseConnection使用示例 ·不带CommandBehavior.CloseConnection时测试结果:…