C#总结

          引言

   在等级考试中学习了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的一个重要的基础,所以应该在实践中多多练习这些理论知识。

  

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g-Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值