知识大全 C++编程人员容易犯的10个C#错误(下)

Posted 变量

篇首语:今日长缨在手,何时缚住苍龙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C++编程人员容易犯的10个C#错误(下)相关的知识,希望对你有一定的参考价值。

C++编程人员容易犯的10个C#错误(下)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  错误 虚方法必须被明确地覆蓋

  在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再次被编译 编译器就会生成一个警告信息

   \\class cs( ): warning CS : ListBox Sort() hides   inherited member Window Sort()

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

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

  public class ListBox : Window       public new virtual void Sort()

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

  错误 类成员变量的初始化

  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 = ; // 初始化        注意 必须明确地定义每个变量的访问权限

  错误 布尔型变量与整型变量是两回事儿

  if( someFuncWhichReturnsAValue() )

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

  if( someFuncWhichReturnsAValue() )

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

  if ( x = )

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

  错误 switch语句中会有些语句执行不到

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

  switch (i)       case :    CallFuncOne();    case : // 错误 不会执行到这里    CallSomeFunc();   

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

  switch (i)       case :    CallFuncOne();    goto case ;    case :    CallSomeFunc();   

  如果case语句不执行任何代码 则所有的语句都会被执行 如下面的代码

  switch (i)       case : // 能执行到    case : // 能执行到    case :    CallSomeFunc();   

  错误 C#中的变量要求明确地赋值

  在C#中 所有的变量在使用前都必须被赋值 因此 可以在定义变量时不对它进行初始化 如果在把它传递给一个方法前 必须被赋值

  如果只是通过索引向方法传递一个变量 并且该变量是方法的输出变量 这是就会带来问题 例如 假设有一个方法 它返回当前时间的小时 分 秒 如果象下面这样编写代码

  int theHour;   int theMinute;   int theSecond;   timeObject GetTime( ref theHour ref theMinute ref theSecond)

  如果在使用theHour theMinute和theSecond这三个变量之前没有对它们进行初始化 就会产生一个编译错误

  Use of unassigned local variable theHour   Use of unassigned local variable theMinute   Use of unassigned local variable theSecond

  我们可以通过将这些变量初始化为 或其他对方法的返回值没有影响的值 以解决编译器的这个小问题

  int theHour = ;   int theMinute = ;   int theSecond = ;   timeObject GetTime( ref theHour ref theMinute ref theSecond)

  这样就有些太麻烦了 这些变量传递给GetTime方法 然后被改变而已 为了解决这一问题 C#专门针对这一情况提供了out参数修饰符 它可以使一个参数无需初始化就可以被引用 例如 GetTime中的参数对它本身没有一点意义 它们只是为了表达该方法的输出 在方法中返回之前 Out参数中必须被指定一个值 下面是经过修改后的GetTime方法

  public void GetTime(out int h out int m out int s)       h = Hour;    m = Minute;    s = Second;   

  下面是新的GetTime方法的调用方法

cha138/Article/program/net/201311/14698

相关参考

知识大全 面试时最容易犯的12个错误

在求职面试中,没有人能保证不犯错误。只是聪明的求职者会不断地修正错误走向成熟。然而在面试中有些错误却是一些相当聪明的求职者也难免会一犯再犯的,我们权称之为"高级"错误。某跨国公司人力资源管理专家总结经

知识大全 PHP开发者常犯的10个MySQL错误

PHP开发者常犯的10个MySQL错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!lishixi

农民种植玉米常犯的10个错误

一、通风透光不好。空杆多,里面的棒比地头、地边的棒小。  二、种子超积温。成熟度不够,水粒子。打不出粮,卖不上价。  三、不耐密的品种盲目加密。控杆、棒小、不耐旱、倒伏、贪青晚熟。  四、缺苗、补苗。

农民种植玉米常犯的10个错误

一、通风透光不好。空杆多,里面的棒比地头、地边的棒小。  二、种子超积温。成熟度不够,水粒子。打不出粮,卖不上价。  三、不耐密的品种盲目加密。控杆、棒小、不耐旱、倒伏、贪青晚熟。  四、缺苗、补苗。

知识大全 .NET开发人员犯的6大安全错误

.NET开发人员犯的6大安全错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HP的白皮书《T

知识大全 C++转向C#要注意的几个变化

C++转向C#要注意的几个变化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  每隔年左右

知识大全 Java开发最容易犯的21种错误

Java进阶:Java开发最容易犯的21种错误  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  D

知识大全 面试最容易犯的高级错误

在求职面试中,没有人能保证不犯错误。只是聪明的求职者会不断地修正错误走向成熟。然而在面试中有些错误却是一些相当聪明的求职者也难免会一犯再犯的,我们称之为“高级”错误。一、不善于打破沉默面试开始时,应试

知识大全 大学生面试要注意哪些容易犯的错误

大学生面试要注意哪些容易犯的错误着装:1、着装要干净、得体,建议穿着正装,主要表达对工作机会的重视;2、发型要整洁、干练;如果着正装,建议穿着比较搭配的鞋子;3、女生化妆建议淡妆,不建议涂抹比较艳丽的

知识大全 针对 Java 开发人员的 C# 编程语言(2)

针对Java开发人员的C#编程语言(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此程序的