C#总结

简介: C#总结

引言


在等级考试中学习了C++,也是从C++开始我们跨入了面向对象的学习,在c++我们真正的接触到了 抽象、疯转、继承、多态等面向对象中常常提到的几个基本概念!当然呢,我们的c#不但有c++那样的面向对象的思想还有和VB一样现成的窗体和界面!这样对于中小型软件的开发有一定的优势,下面我就来简单的总结一下C#的学习:


20141120185855171.jpg

对于C#的总结呢,我主要是从控制台和Windows窗体两部分来画分的,所谓的控制台是指我们的运行结果都是在DOS窗口中展现出来,当然这也是我们很多人不喜欢的一个东东,另一部分就是我们的窗体部分,这一部分就是我们VB一样,我们可以之间在控件库中往窗体上之间拖拽控件就可以了,我们非常的熟悉!


(一)C++ VS C#


c++和c#在语法上有很多相似的地方,在这两种语言中我们都能很好的认识到面向对象给我们带来的好处,下面我主要从这两者的不同来对比学习一下:


(1)c#中没有了多重继承机制,在c#中我们子类只有继承一个父类,那么我们如何达到多重继承的效果呢?在c#中我们引入了接口的概念来实现!



20141121163234250.jpg


(引进接口的原因是:子类从多个父类中继承的时候可能继承到多个相同的方法,从而导致程序的混乱,但是对于接口中只是定义了方法,并没有给出具体的实现,而凡是在接口中定义的方法,在类中必须给出具体的实现,否则就会报错!)


(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那样想做出个界面还得写很多的代码!


首先看一个小例子:在窗体上添加两个按钮(确定和取消)

20141121170527145.jpg


在vb和c#中我们就可以再工具栏中直接拖拽就可以了,并且可以随意的修改控件的位置和它的任何属性。


而在JAVA中我们没有这样的控件库,所以要实现这么一个小小的界面,需要如下代码:

20141121175637933.jpg

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

目录
相关文章
|
安全 编译器 C#
C#基础知识学习之 ✨ 委托(delegate) 与 事件(event) 之间的介绍
委托(delegate) 与 事件(event) 🔥 前言🙏 在之前的文章里介绍了C#中的委托(delegate) (Action、Func、Predicate)的基本含义及用法 那本篇文章在这里还要介绍一个跟委托有很大关系的小伙伴——C#中的 事件(event)🎅 事件跟委托是有很大联系的,所以也就导致很容易分不清他们两个,以及什么时候用这两个 上面有博客提到委托,想单独了解委托的可以去看一下,本篇文章主要说一下 什么是事件 🎄 以及 事件与委托的区别🎁
C#基础知识学习之 ✨ 委托(delegate) 与 事件(event) 之间的介绍
|
存储 C# Windows
WPF技术之RadioButton控件
WPF(Windows Presentation Foundation)中的RadioButton控件用于创建单选按钮,允许用户从一组选项中选择一个。
1597 0
|
安全 C#
C#委托事件的区别
C#委托事件的区别
327 0
C#编写WinForm窗体应用程序(第四期)
在 C# 语言中 RadioButton 是单选按钮控件,多个 RadioButton 控件可以为一组,这一组内的 RadioButton 控件只能有一个被选中。
C#编写WinForm窗体应用程序(第四期)
|
测试技术 C#
委托与事件(一)——C#版本
委托与事件(一)——C#版本
210 0
|
程序员
WinForm播放视频
原文:WinForm播放视频 1背景 这几天一老友要求我做个小软件,在WinForm播放视频.印象中微软有个WM控件直接可以使用,晚上研究下 2实现方式 2.1微软草根 最简单的方式,是直接使用微软的WM控件,也是通过COM方式集成进来.
1076 0
|
4天前
|
弹性计算 运维 搜索推荐
三翼鸟携手阿里云ECS g9i:智慧家庭场景的效能革命与未来生活新范式
三翼鸟是海尔智家旗下全球首个智慧家庭场景品牌,致力于提供覆盖衣、食、住、娱的一站式全场景解决方案。截至2025年,服务近1亿家庭,连接设备超5000万台。面对高并发、低延迟与稳定性挑战,全面升级为阿里云ECS g9i实例,实现连接能力提升40%、故障率下降90%、响应速度提升至120ms以内,成本降低20%,推动智慧家庭体验全面跃迁。
|
4天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
375 91
|
5天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~