C++ VS C#(13):隐藏基类方法,部分类定义
来源:互联网 发布:京东美工 编辑:程序博客网 时间:2024/05/17 23:47
//=====================================================================
//TITLE:
// C++ VS C#(13):隐藏基类方法,部分类定义
//AUTHOR:
// norains
//DATE:
// Monday 04-April-2011
//Environment:
// Visual Studio 2010
// Visual Studio 2005
//=====================================================================
1. 隐藏基类的方法
对于隐藏基类的方法,无论是C++还是C#,都有相同的一面,就是派生类要隐藏的方法名和基类一致即可,如下C++代码所示:
C#的也大同小异,如下所示:
在语法上并无不同,唯一的区别只在于编译器。C++会没有任何警告通过,而C#则是会发出警告。C#对于警告不会置之不理,它用来提醒程序员,是不是有些东西忘记了?如果想消除这个警告,应该函数前增加new关键字,如下所示:
简单点来说呢,只要基类和派生类的函数名相同,但没有额外的修饰符,那么编译器就会提醒你,让你查看一下,是不是留下了什么隐患。当然,消除这个警告,还可以采用重载的方式,两者的区别在于:重载的话,通过基类访问的是派生类的函数;而隐藏的话,访问的还是基类的。所谓的隐藏,只是针对派生类而言。
2. 部分类定义
如果想将一个类的不同功能分块,那么这两种语言又会有何种差异呢?
对于C++来说,无非就是在h文件中声明,在cpp中实现。如果还要细分,那完全可以多个不同功能的cpp文件包含同一个h文件。因此,功能模块的细分相对于C++,只不过是文件的结构布局不同而已。
但情形之于C#,那么情况就大为不同。因为C#没有什么头文件之说,所有的都是*.cs后缀的文件。那么,C#该如何做到功能的分离呢?在这方面,C#上升到了语言的层次,产生了partial关键字。简单来说,partial就是使用部分类定义,是类的定义放在多个文件中。例如,可以将字段啊,属性之类放到一个文件,而把方法放到另一个文件。而这一切所需要做的是,在每个包含部分类定义的文件中使用partial即可,如下所示:
有点需要注意的是,应用于部分类的接口也会作用于整个类。换句话说,如果我们的部分类是这样定义的:
它其实和如下的完整定义是等价的:
另外还有一点,partial关键字也可以用在定义函数方法。但这对函数有明确的限制,就是函数不能有返回值,而并且参数不能为out形参。并且,用partial修饰过的函数,还不能和virtual、abstract、override、new、sealed和extern一同使用。
除此以外,partial修饰函数的时候,还有一个非常重要的特性。编译代码时,如果代码中调用了使用partial修饰的函数,编译器会检查该函数是否真正有实现代码。如果没有找到实现代码,那么编译器会删除这个被partial修饰的函数的所有调用。
C#用partial修饰函数的方式,感觉上和C++宏的一种用法有点像。很多程序员为了测试的需要,会在代码中添加某些宏的调用;当程序稳定了,不再需要这种耗费性能的宏的时候,就会将宏定义为空。所不同的是,宏是需要程序员手工定义为空,而partial则是编译器自动完成。当然,这也仅仅是其中一个用法思路上的相似而已,partial和宏其实并不是一样的东西。
- C++ VS C#(13):隐藏基类方法,部分类定义
- C++ VS C#(8):类定义
- 【c#】定义类成员(字段、方法、属性)
- C#: +(特性 ) + Attitude C#(类)前面或者(方法)前面 (中括号)定义
- Object-C 类定义
- 矩形类定义【C++】
- 矩形类定义【C++】
- VS 对象定义被隐藏(无法打开模块文件“C:...\.NETFramework,Verssion=v4.5.AssemblyAttributes.vb”系统找不到指定文件。)
- C语言中 声明 vs 定义
- obj-c中如何定义类的私有实例方法
- C++,VS创建公共类
- 隐藏C盘的方法
- [C++] 基类一定要定义虚析构函数
- OJ矩形类定义(C++)
- Objective-C(二,定义类)
- C#---部分类、密封类
- objective c 学习:定义类
- Objective-C 类的定义
- [小说连载]张小庆,在路上(7)- 约会
- Thinkpad R61I 驱动下载及安装方法 for windows 2003
- 使用urllib的urlopen函数获得HTTP Response Headers
- hibernate 根据实体类自动生成表
- 重温-Window(NT)启动过程
- C++ VS C#(13):隐藏基类方法,部分类定义
- 如何设置Windows自动登录系统
- Google Calendar 与 OutLook 同步时出错的解决
- GPS卫星同步时钟的发展现状及其应用
- 在网页中打开pdf文件
- 无法打开组策略编辑器的五种解决方法
- 第4章_循环_编程练习4.9计算最高分和次高分
- 无任何网络提供程序接受指定的网络路径-解决方法
- 很强大 转自猫扑 好男人=“破鞋专业户”