C++程序员快速学习C#---(三)完

原创 我的网址 http://blog.csdn.net/hsuyuan/ 如有错误请指正

八 . 类

对于面向对象语言来说 , 类是重头戏 ,C# 中类的使用和 C++ 中类似 , 在细节方面有些差别 .

首先来看一个 C# 的类的例子 :

例 :

class myclass:mybasicclass // 注意基类不需要写限定符

{

private int a;

public int num()

{

return 0;

}

}

public class mybasicclass

{

}

这里写出了一个类的限定符 public,C# 还有的限定符 :

internal: 只能在当前工程中使用 , 当 class 前缺省限制符时就默认为此限制符

public: 可以在任何工程中使用

abstract ( 抽象的 ): 类不能实例化 , 只能继承 , 可以有抽象成员

sealed ( 密封的 ): 不能继承

关键字能够相互组合 .

首先需要知道一点 ,C# 中只能有一个基类 , 它不支持多重继承 , 同时不允许派生类的可访问性比其基类更高 , 也就是说 : 内部类可以继承于公共类 , 反之不行 , 在前文也已经说过 ,object 类是 C# 中最高的类 , 如果一个类没有基类 , 它就隐式的继承了 object 类 , 在类中都可以使用 object 提供的方法 .

也许你还记得在 C++ 中 , 类里面定义的方法的具体实现是在类的外部实现的 , 但在 C# 中已经不允许 ,C# 规定所有的代码都必须在类中 , 所以方法的代码就只能和 C++ 中的内联函数的格式一样 , 但是切记 ,C# 中的这样写法并不意味着是内联的 , 在 C# 中已经取消了内联函数的定义 ,.net 会在编译的时候自动确定是否内联 .

从上面的例子中还能发现一个不同点就算是 : 在类定义结束的时候没有了分号 ;

从现在开始 , 从细节上阐述 C# 的不同用法 :

1. 在 C++ 的名词成员变量 , 在 C# 中称为字段 , 字段在 C++ 中不能初始化 , 但在 C# 中可以直接初始化 ,

2. 构造函数 , 它于 C++ 使用相似 , 但是不允许在其中给字段初始化 ,C# 还添加了一种静态构造函数

public class mybasicclass

{

static mybasicclass()

{

}

}

它不需要限定符 , 它的作用是在程序运行是对静态变量进行赋值

3. 析构函数 : 它和 C++ 的概念已经完全不同了 , 因为 C# 内部有了内存自动收集机 , 能够对不用的内存进行回收 , 所以不需要在析构函数中释放内存了 . 也就无需析构函数 , 但是析构函数在派生于接口的类中函数有作用的 , 接口的概念后面会讲到

4. 虚拟函数 :C# 的虚拟函数同 C++ 在语法上有区别 , 但是含义还是一样的 .C# 中基类的虚拟函数使用关键字 virtual 在派生类中使用 override

5. 运算符重载 :C# 中运算符重载和 C++ 原理基本相同 , 但存在一些区别 , 区别在于有些运算符 C# 已经不允许重载了 . 不能重载的运算符有 :-= , += , /= ,*= ,%=, 按位赋值运算符 (&= …… ) , 布尔运算符 (&& …… ), 赋值运算符 (=). 同时在 C# 中还有一个硬性的规定 , 比如重载了运算符 > 就必须重载 >= , 重载了 == , 就必须重载 != 反之毅然 , 当然不止这些还有 < <= 等等

九 . 异常

C# 和 C++ 的异常基本相同 :

C# 的异常语句 :

try

{

}

catch

{

}

finally

{

}

它们的不同点最主要的就是 , 不管是否抛出异常 , 最后的 finally 块一定马上执行 .

十 . 不安全代码

什么是不安全代码 , 前面我已经说过 , 使用指针就是不安全代码 , 在 C# 中是可以使用指针的 , 而且它和 C++ 的格式一样 , 但是必须放在不安全代码段中 .

声名不安全代码段 , 使用关键字 unsafe .

public unsafe int num()

{

return 0;

}

不安全代码可以是方法 , 类 , 结构

十一 . 接口

在 C++ 中是没有接口这个概念的 . 它是有 COM 演变而来 . 一个 C# 接口只是函数和属性的定义 . 就好比一个抽象类 . 它的定义和类采用相似的语法 . 使用关键字 interface

类对接口的实现是通过派生来实现的 , 对于接口 , 类可以多重继承 .

后记 .

到这里我就准备停笔了 , 也许你会发现类以后的内容变的简单了 , 不详实了 , 的确这于我刚开始的初衷有些背离 , 但这也是有原因的 . 首先就是我在写第三篇的时候发现在 <

1<c# 高级编程="">&gt; 一书的附录部分已经有了  C++  程序员过渡  C#  的内容  ,  而且比较详细  ,  大家可以参看此书  ,  我只是把里面大家经常会用到的语法进行了阐述  ,  对于一些不常用到  ,  大家可以通过专门的  C#  书籍进行详细的了解  .  第二  .  在类之后的内容有许多讲的都是  C++  不具备的内容  ,  这些内容的讲解也无法和  C++  进行比较来讲  ,  所以也没有什么捷径  ,  只能看  C#  的专业书籍进行学习  ,  比如接口  ,  委托  ,  甚至类中的一些用法  ,  还有我没有提到的属性  ,  事件  .  通过此文学习可以在对  C#  一窍不通的情况下快速通过已学知识对其有所了解和掌握  ,  但是一门语言是博大精深的  ,  所以学习  C#  在此基础上还需要看一下经典的教程  ,  对其有一个完全明了的深入理解  ,  同时因为  C#  是建立在  .net  环境之下  ,  所以对  .NET  的机制也需要有一定的认识  ,  最后我希望对  C#  有兴趣的朋友都能完美的掌握其精华  ,  在  .net  的划时代历程上走出辉煌的一步  .</c#>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus