下载首页 | 资讯中心 | 下载分类 | 最近更新 | 排 行 榜 | 国产软件 | 国外软件 | 汉化补丁 |
文章搜索: 分类 关键字 收藏本站设为首页
您的位置:首页网页设计ASP程序 → C++编程人员容易犯的10个C#错__教程
C++编程人员容易犯的10个C#错__教程
日期:2007-5-20 1:14:11 人气:65     [ ]
上一页 [1] [2] [3] 下一页

如果被解包的对象是无效的,或是一个不同数据类型对象的索引,就会产生InvalidCastException异外。

错误5:结构与对象是有区别的
C++中的结构与类差不多,唯一的区别是,在缺省状态下,结构的访问权限是public,其继承权限也是public。一些C++编程人员将结构作为数据对象,但这只是一个约定而非是必须这样的。

在C#中,结构只是一个用户自定义的数据类型,并不能取代类。尽管结构也支持属性、方法、域和操作符,但不支持继承和destructor。

更重要的是,类是一种索引型数据类型,结构是值型数据类型。因此,结构在表达无需索引操作的对象方面更有用。结构在数组操作方面的效率更高,而在集合的操作方面则效率较低。集合需要索引,结构必须打包才适合在集合的操作中使用,类在较大规模的集合操作中的效率更高。

错误6:虚方法必须被明确地覆盖
在C# 语言中,编程人员在覆盖一个虚方法时必须显性地使用override关健字。假设一个Window类是由A公司编写的,ListBox和 RadioButton类是由B公司的和编程人员在购买的A公司编写的Window类的基础上编写的,B公司的编程人员对包括Window类未来的变化情况在内的设计知之甚少。

如果B公司的一位编程人员要在ListBox上添加一个Sort方法:

public class ListBox : Window
{
public virtual void Sort() {"}
}

在A公司发布新版的Window类之前,这不会有任何问题。如果A公司的编程人员也在Window类中添加了一个Sort方法。

public class Window
{
// "
public virtual void Sort() {"}
}

在C ++中,Windows类中的Sort方法将成为ListBox类中Sort方法的基础方法,在希望调用Windows类中的Sort方法时, ListBox类中的Sort方法就会被调用。在C#中,虚拟函数总是被认为是虚拟调度的根。也就是说,一旦C#发现一个虚拟的方法,就不会再在虚拟链中查找其他虚拟方法。如果ListBox再次被编译,编译器就会生成一个警告信息:

"\class1.cs(54,24): warning CS0114: 'ListBox.Sort()' hides
inherited member 'Window.Sort()'.

要使当前的成员覆盖原来的方法,就需要添加override关健字,或者添加new关健字。

要消除警告信息,编程人员必须搞清楚他想干什么。可以在ListBox类中的Sort方法前添加new,表明它不应该覆盖Window中的虚方法:

public class ListBox : Window
{
public new virtual void Sort() {"}

这样就可以清除警告信息。如果编程人员确实希望覆盖掉Window中的方法,就必须使用override关健字来显性地表明其意图。

 

错误7:类成员变量的初始化
C#中的初始化与C++中不同。假设有一个带有private性质的成员变量age的Person类, Employee是由继承Person类而生成的,它有一个private性质的salaryLevel成员变量。在C++中,我们可以在 Employee的构造器的初始化部分初始化salaryLevel,如下面的代码所示:

Employee::Employee(int theAge, int theSalaryLevel):
Person(theAge) // 初始化基础类
salaryLevel(theSalaryLevel) // 初始化成员变量
{
// 构造器的代码
}

这种方法在C#中是非法的。尽管仍然可以初始化基础类,但象上面的代码那样对成员变量初始化就会引起编译错误。在C#中,我们可以在定义成员变量时的同时对它进行初始化:

Class Employee : public Person
{
// 成员变量的定义
private salaryLevel = 3; // 初始化
}

注意:必须明确地定义每个变量的访问权限。

错误8:布尔型变量与整型变量是两回事儿
if( someFuncWhichReturnsAValue() )

在C#中,布尔型变量与整型变量并不相同,因此下面的代码是不正确的:

if( someFuncWhichReturnsAValue() )

if someFuncWhichReturnsAValue返回零表示false,否则表示true的想法已经行不通了。这样的好处是原来存在的将赋值运算与相等相混淆的错误就不会再犯了。因此下面的代码:

if ( x = 5 )

在编译时就会出错,因为x=5只是把5赋给了X,而不是一个布尔值。

错误9:switch语句中会有些语句执行不到
在C#中,如果一个switch语句执行了一些操作,则程序就可能不能执行到下一个语句。因此,尽管下面的代码在C++中是合法的,但在C#中却不合法:

switch (i)
{
case 4:
CallFuncOne();
case 5: // 错误,不会执行到这里
CallSomeFunc();
}

要实现上面代码的目的,需要使用一个goto语句:

switch (i)
{
case 4:
CallFuncOne();
goto case 5;
case 5:

出处:本站原创 作者:佚名
 阅读排行
01.精美qq空间横幅代码
02.最酷qq个性女生网名
03.最新又有免费QQ秀啦《..
04.巧用透明FlaSh扮靓你的..
05.花之神匠代码(最新代码..
06.最新QQ空间免费导航
07.最新免费个人形象设置..
08.最新qq空间flash代码m..
09.CSS技术结合图像实现动..
10.Photoshop光影魔术师:..
11.QQ音速种子狂刷
12.最新QQ空间透明代码
13.PS实例教程:教你制作结..
14.Photoshop光影魔术师:..
15.制作背景图__教程
16.用Photoshop制作漂亮的..
17.如何获得QQ音速种子
18.≤QQ空间代码≥在日志..
19.网页浮动广告的制作代..
20.用Photoshop制作大红灯..
21.常用CSS
22.Photoshop给靓丽美女打..
 推荐文章
·Photoshop 表现技法之..
·快速将你的相片矢量化..
·PHOTOSHOP制作炽热的太..
·用Photoshop制作美丽的..
·流行杀手的娃娃工厂__..
·打造8号台球__教程
·PHOTOSHOP制作待机MM图..
·用Photoshop帮MM做纹身..
·PHOTOSHOP美眉着色绝招..
·PHOTOSHOP花露的制作_..
·PHOTOSHOP渐变工具的巧..
·PHOTOSHOP手绘奥兰多-..
·高难度抠图两种方法__..
·Photoshop高尔夫球的制..
·Photoshop打造精美玉佩..
Eqxia_COM下载站 版权所有 Copyright© 2001-2005 Www.eqxia.COM, All Rights Reserved.