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

.

 

对于面向对象语言来说,类是重头戏,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

 

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

 

 

后记.

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值