C#开发的进化史
今天开始呢,我会跟大家一起学习C# ,我会由浅入深从基础来教大家,给大家推荐一本个人认为最为适合C#入门的书《C#本质论》这本书写的确实不错,如果有兴趣的话可以买来看一看,在期刊期间我也会发一些关于有趣的小案例,努力让大家学到新的知识。我写的文章可能很枯燥,我尽力让他不枯燥吧。
学习工具 Visual Stdio 2017
操作环境 win10
本篇推文要掌握的是:
1.C#的诞生
2.一个进化的例子
3.C#语言写作规范
闲话少说,进入正题
一.C#的诞生
C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。它是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它继承C和C++强大功能但是由去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。C#是微软公司在2000年6月发布的一种新的编程语言,主要由安德斯·海尔斯伯格(Anders Hejlsberg)主持开发,它是第一个面向组件的编程语言,其源码会编译成msil再运行。它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,并且新增了许多功能及语法,而且它是微软公司.NET windows网络框架的主角。 (转自:百科)
那么拿中国市场来说,C#处于一个很尴尬的地位,功能性强且稳定,但是目前中国可以说是Java语言和近年来崛起的python语言的大部分市场,C#个人认为可是说是最适合快速开发的语言,并且后期的 ASP.NET 首选语言是C#,所以个人还是非常期待c#在将来能崛起。
二.一个进化的例子
我们先来大概的了解一下C# 各个版本的诞生年龄和对应的编译软件Visual Stdio 的版本吧。
语言版本 发布时间 .NET Framework要求 Visual Studio版本
C# 1.0 2002.1 .NET Framework 1.0 Visual Studio .NET 2002
C#1.11.2 2003.4 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 2005.11 .NET Framework 2.0 Visual Studio 2005
C# 3.0 2007.11 .NET Framework 2.03.03.5 Visual Studio 2008
C# 4.0 2010.4 .NET Framework 4.0 Visual Studio 2010
C# 5.0 2012.8 .NET Framework 4.5 Visual Studio 20122013
C# 6.0 2015.7 .NET Framework 4.6 Visual Studio 2015
C# 7.0 2017.3 .NET Framework 4.6.2 Visual Studio 2017
C# 7.1 2017.6 .NET Framework Visual Studio 2017 v15.3
C# 8.0 待发布 .NET Framework 4.7.1 Visual Studio 2017 v15.7
《C#高级编程》这本书市面上发行的最新版本是《C#高级编程 C# 6.0 & .NET 4.6》 ,如果有能力的话海外淘应该可以买到更新版本的书,但是一般是全英文的。
接下来我们来领略一下他各个版本的不同吧。
1:C#1.0可是说是完全模仿Java,并保留了C/C++的一些特性比如说结构体struct,对于咱们学完C语言的同学,这是非常容易理解,非常容易上手的。
2:C#2.0加入了泛型的概念,也与Java1.5的泛型如出一辙,其实我感觉C#2.0加入的迭代器(Iterators)挺好玩的。
3:C#3.0加入了一堆语法糖,并在没有修改CLR的情况下引入了Linq查询,这是一个非常大的进步,虽然当时很多项目出于性能之类的原因没有采用,但是C#至今是最适合快速开发的编程语言之一。
4:C#4.0增加了动态语言的特性,从里面可以看到很多javascript、 python这些动态语言的影子。虽然越来越偏离静态语言的道路,但从另一个角度来说,这些特性也都是为了提高程序员的生产力,当然现在我们也看到了,确实不错,但是近年来好像被国内主流的Java语言遮住了光芒,期待他能在以后大放光彩,因为Java语言不能跨平台确实是一个Java非常严重的缺点,而且Java要收费了,那么意味着中国的大部分公司要找出路了,个人觉得微软公司的.NET语言又要开始崛起了,期待吧,以后的事情以后说。
5. C#5.0 最大的亮点是 CASE 运算符不单单只是支持单个变量或常量,还支持表达式了
例如:
switch(myobj)
{
case string.IsNullorEmpty(myotherobj):
case myotherobj.Trim().Lower:
}
这个就可以选择的时候直接判断是否为空值,不用管变量 myotherobj 的值是大写还是小写了。
6.C# 6.0 的特性就更多了,我先拿一个小程序来讲一下
以往显示某个变量时, 我们一般会这样写 :那么到了C# 6.0 代码变得更少
这个案例写的有点长,目的是为了让大家了解一下C#以往全面的编程风格。我们再来了解一下c#新版本语法格式:
其实这种字符串插值 “$” 可以说是等同于 string.Format
其余的像空条件操作符、成员函数/属性的Lambda表达式、静态类Using、索引初始化等等的一些C#的特性我会在后面的推文讲,本节不做过多的叙述。
7.C# 7.0 和C# 8.0 其实我没过多的了解过,因为敲代码的时候有些地方在我大脑里固化了,不然而然的就会写出来,而且因为工作时间原因我不会强迫自己追求太多的东西,当然这不是说没有上进心,我只能说我在努力着,闲下来的时候除了必须做的事情之外,其余的时间就一定是在学习新的知识,因为计算机技术领域更新太快,不了解前沿的知识,是会被时代所淘汰的,那么,等我把C#7.0和C#8.0用熟了后,我补给大家一份推文,以示谢罪。
三.C#语言写作规范
3.1命名规范
上面我也说了C# 是C系语言,那么它其实跟C语言的明名规范一样
- 只能以字母或下划线开始;
- 不能以数字开始;
- 一般小写;
- 关键字不允许用系统保留字
二、函数名的命名规则
大家了解一下C# 里面控件的命名规则
首先是C# 里面大家最先接触到的变量的明名规则
类型 前缀 示例
Array arr arrShoppingList
Boolean bln blnIsPostBack
Byte byt bytPixelValue
Char chr chrDelimiter
DateTime dtm dtmStartDate
Decimal dec decAverageHeight
Double dbl dblSizeofUniverse
Integer int intRowCounter
Long lng lngBillGatesIncome
Object obj objReturnValue
Short shr shrAverage
Single sng sngMaximum
String str strFirstName
咱么再来看一下属于C#核心技术的窗体控件的命名规则
数据类型 数据类型简写 标准命名举例
Label lbl lblMessage
LinkLabel llbl llblToday
Button btn btnSave
TextBox txt txtName
MainMenu mmnu mmnuFile
CheckBox chk chkStock
RadioButton rbtn rbtnSelected
GroupBox gbx gbxMain
PictureBox pic picImage
Panel pnl pnlBody
DataGrid dgrd dgrdView
ListBox lst lstProducts
CheckedListBox clst clstChecked
ComboBox cbo cboMenu
ListView lvw lvwBrowser
TreeView tvw tvwType
TabControl tctl tctlSelected
DateTimePicker dtp dtpStartDate
HscrollBar hsb hsbImage
VscrollBar vsb vsbImage
Timer tmr tmrCount
ImageList ilst ilstImage
ToolBar tlb tlbManage
StatusBar stb stbFootPrint
OpenFileDialog odlg odlgFile
SaveFileDialog sdlg sdlgSave
FoldBrowserDialog fbdlg fgdlgBrowser
FontDialog fdlg fdlgFoot
ColorDialog cdlg cdlgColor
PrintDialog pdlg pdlgPrint
还有很多时候会遵循“驼峰命名法”或者“匈牙利命名法”
而且“驼峰命名法”又分为“小驼峰命名法”和“大驼峰命名法”
小驼峰法
变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。譬如
int myHomeName
变量myHomeName第一个单词是全部小写,后面的单词首字母大写。
大驼峰法
相比小驼峰法,大驼峰法(帕斯卡命名法)把第一个单词的首字母也大写了。常用于类名,命名空间等。譬如 public class DataBaseAdmin; 语句用的就是“大驼峰命名法”。
例如咱么说,给Button控件命名,我个人的习惯是“小驼峰命名法”
我们对其中的两个Button 控件(登陆、退出)的命名为btn_Login和btn_Exit 这个就是取了Buttton控件的缩写btn然后用下划线加要表达的意思的英文单词来命名,例如给的这个登陆界面的Name属性为frmLogin,因为Form窗体的简写为frm,而Login 表示该控件的用途。
例如这个项目,这几个窗体的用途简单明了,对于后期的维护用处非常大。
但是在做东西的时候,会统一命名规范,那么我们就要遵循统一下来的命名规范,例如
,这个项目就是窗体统一的用大写的“F”来开头,加一个下划线后面的用来表示用途。
那么再来说匈牙利命名法:基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。 这个我没太用过,并不是他不好,而是我周围的人统一用驼峰的方式来命名,那么我就习惯用驼峰来命名了。
我来举一个算是匈牙利命名法的例子吧
例如咱么说的 窗体句柄 hwnd ,其中字母 h 表示的是句柄,wnd表示的是windows窗体的缩写,那么 AllWnd 当然就表所有窗体了,这么说不太容易理解。
这样就容易理解了,这两行代码是以前写c++的时候写的,现在拿来用一下,这两行代码非常容易理解, “ RECT” 类定义一个名为“rect”的对象,“rect”这个对象是用来存储成对出现的参数,比如,一个矩形框的左上角坐标、宽度和高度。
而“HWND”对象是用来获取句柄的,那么自然而然“AllWnd”就是获取所有窗体的句柄啦。
在命名规范这说最后几句话,要注意,“写注释是流氓,名字瞎起是扯淡”。因为程序的代码行数是非常多的,人的记忆能力有限,经过一段时间过后,我们会忘记某段代码是用来实现什么功能的。例如说上面定义矩形这行代码如果说命名的简单明了,而是随意取得名字,那么在后期的维护中是非常难的,咱们用一个非常简单的小程序来向大家演示一下:
static void Main(string[] args)
{
double a = 3.14;
double a1 = 5;
Console.WriteLine(“圆的面积为:{0}”, a * a1 * a1);
Console.Read();
}
这个小程序无非就是计算半径为5的圆的面积,但是如果说我们命名的变量的非常之多,而我们命名的不规范而去随意取名字,那么以后自己看自己写的代码是也忍不住爆粗口,
static void Main(string[] args)
{
double Pi = 3.14;
double R = 5;
Console.WriteLine(“圆的面积为:{0}”, a * b * b);
Console.Read();
}
这样就有了鲜明的对比了,后者非常容易理解,而且咱们说某个东西被大众所接受,并且认为这个东西就要用这个变量来命名,那么我们也就不要另辟蹊径的用别的来命名了,例如咱们说圆周率 “Π” 在编程中被大众所接受的是用“ Pi”或 “P”来命名,那么我们就不要在变动了。
其实各种命名法没有哪个强哪个好之分,命名法之所以诞生就是为了让使用者看的明白,一看就是到着代表的含义是什么,用什么无所谓,能让人们看明白就好。
到此,本篇推文就结束了,请记住C#一切皆有可能。