引言
在等级考试中学习了C++,也是从C++开始我们跨入了面向对象的学习,在c++我们真正的接触到了 抽象、疯转、继承、多态等面向对象中常常提到的几个基本概念!当然呢,我们的c#不但有c++那样的面向对象的思想还有和VB一样现成的窗体和界面!这样对于中小型软件的开发有一定的优势,下面我就来简单的总结一下C#的学习:
对于C#的总结呢,我主要是从控制台和Windows窗体两部分来画分的,所谓的控制台是指我们的运行结果都是在DOS窗口中展现出来,当然这也是我们很多人不喜欢的一个东东,另一部分就是我们的窗体部分,这一部分就是我们VB一样,我们可以之间在控件库中往窗体上之间拖拽控件就可以了,我们非常的熟悉!
(一)C++ VS C#
c++和c#在语法上有很多相似的地方,在这两种语言中我们都能很好的认识到面向对象给我们带来的好处,下面我主要从这两者的不同来对比学习一下:
(1)c#中没有了多重继承机制,在c#中我们子类只有继承一个父类,那么我们如何达到多重继承的效果呢?在c#中我们引入了接口的概念来实现!
(引进接口的原因是:子类从多个父类中继承的时候可能继承到多个相同的方法,从而导致程序的混乱,但是对于接口中只是定义了方法,并没有给出具体的实现,而凡是在接口中定义的方法,在类中必须给出具体的实现,否则就会报错!)
(2)C#与Java类似,编译后得到的还不是机器代码,而是运行在虚拟机中的元指令。它对安全性做了更多的考虑,没有指针,不能直接操作内存,自动实现内存管理。C++中的指针在带来强大的灵活性和高效的同时,也带了不少使用上的难题,C++程序中的绝大多数问题都来源于指针的不正确使用,C#出于软件安全性的考虑和语言易用性的考虑没有指针。
C#中实现自动垃圾回收,通过new在堆中创建对象,当对该对象的引用计数为0时回收内存。类有构造函数而没有析够函数。
C#没有指针这个概念,只有引用和数值之分。int等内部数据类型和struct定义的类型是数据类型,拷贝时做深度拷贝;而string和用class定义的类型是引用类型,拷贝时做浅拷贝——与深度拷贝对应,它通过引用计数来实现对象和内存管理。
C++中用指针能够轻易实现的功能,C#需要引进许多额外的机制。比如C++的函数指针,在C#中称之为delegate。C#中的参数传递,分为传值和传址两种,传址时需要加ref或者out(传回改变)关键字
(3委托与事件、装箱与取消装箱、Web Services……一大堆C++没有的新东西,我感觉是做大型项目方便了管理,也容易扩充,但做起小型项目,由于是编译成IL代码的,运行需要.NET Framework SDK支持,效率是个问题,不利于做那些对运算速度和内存消耗要求高的项目。
(二)VB vs C# VS JAVA
我把这三者放在一起比较,也许有很多人不解,一个是面向过程的一个是面向对象的有着天壤之别,这有什么好对比的啊?在这我主要是对比两者的可视化的界面部分,C#中的窗体布局和VB有一拼,不想JAVA那样想做出个界面还得写很多的代码!
首先看一个小例子:在窗体上添加两个按钮(确定和取消)
在vb和c#中我们就可以再工具栏中直接拖拽就可以了,并且可以随意的修改控件的位置和它的任何属性。
而在JAVA中我们没有这样的控件库,所以要实现这么一个小小的界面,需要如下代码:
import java.awt.*;
import javax.swing.*;
public class Jiemian {
public static void main(String[] args) {
JFrame frame = new JFrame("郑浩");
Container contentPane = frame.getContentPane();
JPanel panel = new JPanel();
JButton button1 = new JButton("确定");
JButton button2 = new JButton("取消");
panel.add(button1);
panel.add(button2);
contentPane.add(panel,BorderLayout.SOUTH);
frame.setSize(300,200);
frame.setVisible(true);
}
那么就有人问了,既然JAVA这么繁琐,为什么它会这么流行呢?在回答这个问题之前呢,我先说说从面相过程到面相对象的发展:
面向过程是通过划分功能模块,通过函数相互间的调用来实现,但需求变化时,就需要更改函数,而你改动的函数有多少地方调用它,关联了多少数据,这是很不容易弄清楚的地方。并且在后期的维护和调试中耗费大量的人力物力,并且想在原基础上扩展功能也是很不方便的。
而面向对象关注的是对象,对象的优点在于,可以定义自己负责的事物,做要求它自己做的事情,对象自己负责自己,而且应该清楚的定义责任!它把变化的部分封装在一个区域内,从而更容易的将代码与变化产生的影响隔离开来,显然对象比流程更加稳定,也更加封闭!
C#和JAVA都是面向对象的主流语言,但是c#在开发中小型项目上可以展现它的优势,但在稳定性上就没有JAVA强大了,并且JAVA的最大优势就是“一处编译,到处运行”JAVA是运行在虚拟机上的,所以可以跨平台运行,这也是JAVA流行的原因之一!
(三)小结
c#在程序上有面向对象的思想,有了面向对象的特性——可维护、可扩展、可复用、灵活性好等,在界面上有现成的控件库,这使得它在中小型项目的开发中独占鳌头,当然c#也是我们学习JAVA的一个重要的基础,所以应该在实践中多多练习这些理论知识。