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