C# 基础知识 (一).概念与思想篇
在C#中有一些我自己认为比较独特的知识点,这些知识点是我经常使用的知识,但对它们的了解还是比较少的,所以通过查找资料学习,总结了这些独特的知识点并简单叙述,第一篇主要是一些概念和思想方面的知识。(后面还有C#其他篇的文章)
一.C#概念
C#语言是从C和C++语言演变而来的,是微软创建的一门面向对象、运行在.NET Framework上的高级程序语言,是Windows的一个必要组件,包括一个称为公共语言运行时(common language runtime,CLR)的虚拟执行系统和一组统一的类库。(C#源文件扩展名为.cs)
C#与Java有很多相似的地方:继承、接口、声明命名空间(using&import)、从Main入口点开始执行、源代码被编译成中间状态等。同时也有明显不同之处:C#借鉴了Delphi的与COM是直接集成的特点、它们所执行的平台也不相同,Java运行环境JRE(Java Runtime Environment),C#运行环境CLR(Common Language Runtime),且CLR支持多种语言;同时C#提供封箱装箱等方法。
二.面向对象思想
面向对象是将客观事物看做属性和行为的对象,通过抽象同一类对象的共同属性和行为,形成类。通过对类的继承和多态实现代码重用等。对象(Object)是类(Class)的一个实例(Instance),如果将对象比作房子,那么类就是房子的设计图(类中定义包括属性和方法)。
面向对象的三个基本特征为:
(1).封装:把客观事物封装成抽象的类,类中数据和方法只让可信类或对象操作,不可信的隐藏(内部细节)
(2).继承:它可使用类的所有功能,无需重新编写原有类且对功能进行扩展
(3).多态:一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或表现不同的行为,各个类能表现不同的语义,实现的两种方法为覆盖和重载
通过下面的例子来讲解面向对象:
例1:让你编写一个计算长方体体积的程序,通常的思想是定义3个变量长=a,宽=b,高=c,体积v=a*b*c;而在面向对象思想中先创建一个长方体的类,在类中定义长宽高和体积,然后定义方法,在实例化使用。(C++代码)
class Rect {
public:
void showArea(…); //定义方法:计算长方体体积
private:
float a,b,c,v; //定义属性:长 宽 高 体积(私有成员)
}
void Rect::showArea(…) {…}
这样的好处是它是站在事物本身的角度去思考解决问题,如果上面采用面向过程定义函数的形式实现,当出现多个形状时,你需要对每一种形状都定义一种方法,而面向对象只需把这些形状的属性和方法抽象出来,更加方面的实现。
值得注意的是,面向对象提供的是一种思想,而非仅仅是课本中的那点知识,很多时候我们仅仅是把使用了C++、C#或Java一门面向对象的语言,或者是定义了几个类、使用继承等知识就认为自己运用了面向对象(我就是这样的);但我更认为面向对象是一种思想,一种更好的解决实际问题的方法。比如有这样一个问题:
例2:为了方便儿童学习编程,X公司开发了一套Racing Car 模拟器,使用这个模拟器每个孩子都可以用一种简单的语言来控制一辆赛车,例如,right,left等。请设计一种简单的语言,给出它的语法,以及该语言的类图。
这就是我们实际编程中联系到生活的问题,它涉及到了设计模式的相关知识,其中我采用的方法是“命名模式”实现的:客户端是定义Children和Car,请求者是Children发出的Right\Left\Up\Down命令,接受实现者是Car执行Move(),抽象命令是上下左右的抽象接口,具体命令是Car的上下左右。我制作的类图如下:
通过这个例子我不是想证明我采用命令模式和画的类图是否正确,我想阐述的想法是我们学习面向对象知识主要是用来解决实际生活中的问题,让它更加高效的解决问题和优化代码。在学习《设计模式》时老师就曾说过“模式是现成的,但实现方法要靠自己;同时,学习的时候要敢于否认自己以前很熟悉的套路,甚至经典套路,只要能更加高效正确的完成项目,你的模式就很可能就是经典。”所以,我才认为面向对象是一种思想,不是宏观的C语言就是面向过程,C++、C#就是面向对象。
同时,面向对象思想要适应需求的变化,解决用户的实际需求,在设计时就要尽量考虑到变化,会涉及到抽象、封装变化(重点)、设计模式等知识。补充:C#中的对象都是System.Object的子类,即所有对象都继承System.Object,这样的好处是所有的对象都可以有公用的方法,如ToString()方法。
三.总结
上面的内容主要是我对C#基础知识的一些自己理解,很可能我理解思想是错误的,但我更希望提供一种自己的思想与大家分享。同时,由于知识有限,做的项目也少,可能理解有错误的地方或还没有理解更深层的地方,见谅!最后希望几十年后的自己也能像很多大神一样回过头来对年少时的自己写的这些博文做些更深入的分析,在根据那时的经历写出更优秀的阅历与大家分享更深刻的经验!鼓励自己与大家加油。
(By:Eastmount 2013-8-20 夜1点)
参看一些书籍孙景瑞的《从零开始学C#》、罗刚的《使用C#开发搜索引擎》、《设计模式》课件、同时参考了CSDN论坛中一篇关于面向对象的讨论,个人认为非常不错。http://bbs.csdn.net/topics/220013605
C# 基础知识 (一).概念与思想篇的更多相关文章
- C# 基础知识系列- 16 开发工具篇
0. 前言 这是C# 基础知识系列的最后一个内容讲解篇,下一篇是基础知识-实战篇.这一篇主要讲解一下C#程序的结构和主要编程工具. 1. 工具 工欲善其事必先利其器,在实际动手之前我们先来看看想要编写 ...
- YUM源、磁盘基础知识 CDN概念
第1章 YUM源 1.1 什么是yum源 Yellowdog Updater, Modified 一个基于RPM包管理的字符前端软件包管理器.能够从指定的服务器自动下载RPM包并且安装,可以处理依赖性 ...
- jni的一些基础知识和概念
11.1基础知识 JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? |- ...
- Java 多线程(一) 基础知识与概念
多线程Multi-Thread 基础 线程概念 线程就是程序中单独顺序的流控制. 线程本身不能运行,它只能用于程序中. 说明:线程是程序内的顺序控制流,只能使用分配给程序的资源和环境. 进程 进程:执 ...
- JavaScript基础知识(概念、常量和变量)
1.JavaScript概念 JavaScript是脚本语言; 编写之后,可以直接运行(缺失了编译的过程) 2.JavaScript发展 LiveScript => JavaScri ...
- java基础知识-基本概念
1.1 java语言有哪些优点? 1.java语言为纯面向对象的语言. 2.平台无关性.java语言的优点便是“一次编译,到处执行”.编译后的程序不会被平台所约束,因此java语言有很好的移植性. 3 ...
- qt 5 基础知识 2(控件篇)
QVBoxLayout *lay = new QVBoxLayout(this); // 创建一个竖直的盒子 lebel 篇 lay->addWidget(label = new QLabel( ...
- CSS基础知识(概念、块级元素、行内元素、选择器)
1.CSS概念 全称为Cascading Style Sheets(层叠样式表),支持专有的文件 - 扩展名为".css" 作用:将HTML的结构(HTML标签即html)与样式( ...
- DOM基础知识(概念、节点树、事件、Document)
1. DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...
随机推荐
- LeeCode-Majority Element
Given an array of size n, find the majority element. The majority element is the element that appear ...
- python模拟Get请求保存网易歌曲的url
python模拟Get请求保存网易歌曲的url 作者:vpoet mail:vpoet_sir@163.com 日期:大约在夏季 #coding:utf-8 import requests impor ...
- VBA:Google翻译(含tk算法)
完整的tk算法: //源自http://translate.google.cn/ TKK=eval('((function(){var a\x3d618632403;var b\x3d14854840 ...
- YII学习(第一天)
#Apache # 设置文档根目录为 "basic/web" DocumentRoot "path/to/basic/web" <Directory &q ...
- 【转】DynDNS使用随笔
暂且小结一下: 1.下载编译客户端代码并交叉编译 首先,按照网上提示的步骤,在www.dyndns.com注册了帐号,并申请了域名,绑定了IP; 然后,在站点中找到客户端源码,其中ddclient是p ...
- IOS MVC
简单的理解: V对M是不能通讯的. C对M通讯:API M对C通讯:Notification,KVO C对V通讯:Outlet V对C通讯:Target-action, Delegate,Dataso ...
- wpf实现IE菜单栏自动隐藏效果
IE菜单栏默认为隐藏状态,按下键盘Alt键后显示,菜单失去焦点则自动隐藏.下面说说WPF中如何实现这样的效果. 第一步:Menu默认设置为隐藏(Visibility="Collapsed&q ...
- Android Studio虚拟机配置虚拟键盘
1. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2pjMjExMzIy/font/5a6L5L2T/fontsize/400/fill/I0JBQkF ...
- 【Java基础】单例模式
单例模式:保证整个项目运作期间某一个对象有且只有一个. 主要有:1,饿汉式:2,懒汉式. class Singleton1//饿汉式 { private Singleton1(){}//先把构造方法私 ...
- 80端口被NT kernel & System 占用pid= 4的解决方法
引用http://www.2cto.com/os/201111/111269.html的方法.亲测可用 该进程是Http.sys.它是http API的驱动组件,Http栈服务器.如果该端口被Http ...