第三期讲课内容(刀疤主讲)

前些时间因为出差所以中断了一段时间﹐也来了不少新的群友﹐如果你还是初学者﹐请看看我前面的讲课内容﹐每一讲的内容都是按步就班的﹐希望你能有一些连贯﹐关于C#我用的时间也不是很久﹐不可能面面了解﹐但是综合我几年的经验和近期的学习﹐本讲主要针对搜集的资料以及的看法﹐中间不免遗漏的错误。

请先把窗口最大化﹐期间请不要闲谈﹐如果不是觉得很必要的问题请在我讲完以后问我﹐使得我讲课有一个连贯性。

C#语言

C#产生以前微软的主要开发语言是C/C++C/C++相当灵活但是非常容易出错﹐开发周期长﹐效率不高。

因此推出了C#﹐它的优点比较多﹐ VB一样简单﹐又象C++样强大﹐还有些象JavaC#是微软在研究了C C++ Java SmallTalk等语言的基础上推出的新语言(官方引用)﹐与Java比较C#更接近于C++﹐也引入了一些新概念﹐它是面向组件的语言。

         C#是为了使用和支持基于组件编程而特别设计的﹐.NET架构中的多数内容是C#语言编写的(请住这一点)﹐你可以认为C#是微软下一代平台开发语言﹐C#C++的发展﹐也是对Java的抗衡(虽然微软口口声声说不是)

C#的特点可以概括为﹕语法简单﹑功能强大﹑面向对象﹑安全可靠﹑版本控制﹑兼容性强

1)语法简单

C#的首要目标就是语法简单(当然是针对C++来说)C#中谨慎的使用指针﹐基本以引用取代。用过C++都知道”::””->”操作符吧﹐C#都没有使用﹐在C#里开发者不用记住基于不同处理器架构的隐含的类型﹐象整型的变化范围等﹐你可以通过同时学习C#C++做比较。

2)功能强大

例如套接字﹐金融数据类型都体现着它的强大。这一点不多说了。

3)面向对象

封装﹑继承﹑多态﹐听说过这些概念吧﹐有关这方面的东西也不介绍了﹐以后专门开一讲

4)安全可靠

C#有严格的类型安全﹐你不能使用没有初试化的变量﹐对于对象的的成员变量﹐编译器会自动清零﹐而对于局部变量需要编程者去做﹐避免了使用未经初始化的变量而造成的奇怪错误。

5)版本控制

去看看DLL HELL是什幺就明白了。

6)兼容性强

C#允许使用CLS(Common Language Specification)通用语言规范访问不同的API﹐上次一位群友已经问到这个问题﹐主要是C#编译器会检测所有的公共出口编译﹐并有错误提示﹐CLR允许COM的透明访问﹐支持OLE自动化。

7)灵活机动

尽管C#代码的默认状态是类型安全的﹐但是你仍然可以声明一些类或者类的方法是非安全的。这样就可以使用指针﹑结构﹑静态地址分配数组

下面是C#Java的一些比较

C#                                                             C++                                                          Java

继承                   允许单个继承﹐允许实现多接口              允许从多个类继承                     允许单个继承﹐允许实现多接口

接口实现           通过Interface关键词                                     过抽象类                                       通过Interface关键词

内存管理           由运行时环境管理﹐垃圾收集器              手工管理                                       由运行时环境管理﹐垃圾收集器

指针                   支持﹐但只在很少非安全模式下              支持﹐常用功能                                   完全不支持﹐代之以引用

才支持﹐通常以引用取代指针

代码编译后      .NET中间语言(IL)                                可执行代码                                  字节码

单一公共基类                                                                                                                  

异常处理           异常处理                                                返回错误                                       异常处理

 

C#面向对象程度比Java高﹐C#中的基本类型都是基于类的﹐如int.Int32 Int32是系统提供的一个类﹐ int基本类型就映像为类int32C#具有比Java更强大的功能﹐C#拥有Vb的快速开发的便利和C++的强大特点﹐C#有极大的兼容性﹐可以用C#调用已有的VB,C/C++, COMVBX﹐几乎是微软所有产品的总接口;C#Java速度快﹐为了跨平台C#也采用了JIT译器﹐并使得JIT发展和提升﹐所以C#的执行速度快。

我不想比较哪种语言的优劣﹐但是可以肯定C#.NET平台上最好的开发语言。

C#语法介绍

1数据类型和变量

1.1数据类型

数据类型主要分为两类﹐值类型和引用(地址)类型(还包括不安全的指针类型)﹐它们之间的区别是﹐值类型的变量直接包含数据﹐而引用类型的变量包含的对象的引用(地址)

1.1.1 值类型

所有的值类型都是从类Object中继承来的﹐没用任何值类型是从值类型继承来的﹐值类型的变量总是包含该类型的数值。

              1.1.1 .1值类型的默认值

                   所有的值类型都有默认的构造器

l           sbyte,byte,short,ushort,int,uint,long,ulong     :        0

l           Char                                                               :        /x0000

l           Float                                                               :        0.0f

l           Double                                                  :        0.0d

l           Decimal                                                :        0.0m

l           Bool                                                               :        false

l           枚举                                                              :        0

int i=0;int i=new int();使得i变量都初始化为0

1.1.1 .2简单类型

C#提供的预定义的简单数据类型﹐目的就是可以执行一些特殊的简化和操作

       保留字                                  别名

l           sbyte                         :                  System.Sbyte

l           byte                           :                  System.Byte

l           short                         :                  System.Int16

l           ushort                       :                  System.Uint16

l           int                    :                  System.Int32

l           uint                           :                  System.Uint32

l           long                          :                  System.Int64

l           ulong                        :                  System.Uint64

l           char                           :                  System.Char

l           float                          :                  System.Single

l           double             :                  System.Double

l           bool                          :                  System.Boolen

l           decimal            :                  System.Decimal

int i=int.MaxValue;    //System.Int32.MaxValue

 

 

 

1.1.1 .3整型类型

包括sbyte,byte,short,ushort,int,uint,long,unlong,char

整数类型的一元二元操作总是int,uint,long,unlong

对于一元操作+~(取补)﹐操作转化类型为int,uint,long,unlong的首位(好似1+1.2 1要先变为浮点)

对于二元操作+,-,*,/,%,&,^,|,==,!=,>,<,>=,<=﹐操作作转化类型为int,uint,long,unlong的首位

对于二元操作>>,<<﹐左边的操作类型转换为int,uint,long,unlong的首位

(转换操作符 隐式转换()和显式转换())

请注意Char是整型类型﹐为16位无符号整数﹐但是它的常数必须写做文字符号﹐且没有到其它类型的转换

1.1.1 .4浮点类型

folat 32单精度和double 64为双精度

注意有正0和负0的区分﹐大多数情况都简单的表示为0

非数值为NaN﹐产生于非法的浮点操作

1.1.1 .5小数类型(金融类型)

128 位数据类型

注意不能进行和浮点类型的隐式转换

1.1.1 .6布尔类型

不存在和其它类型的转换函数

C#中整数类型和0比较引用类型和null比较﹐不能把整数01认为是假真

1.1.1 .7枚举类型

枚举类型来自System.Enum﹐这里不展开了

         1.1.2 引用类型

1.1.2 .1Class类型

含有数据成员(常数﹑域﹑事件)﹐函数成员(方法﹑构造﹑析构)﹐嵌套类型中的一种的数据结构﹐可以继承

1.1.2 .2Object

是所有其它类型的基类型﹐C#中所有的数据类型都是直接或间接从Object继承来的

1.1.2 .3string类型

它是直接从Object继承而来的封装类﹐string 类的实例代表了Unicode字符串

注意string是一个引用类型﹐必须初始化才能使用

string str;

str.Replcae(a,aa);是错误的

int i;

i.toString();是正确的

1.1.2 .4接口类型

接口定义了一种协议﹐执行此口的类或结构必须服从协议﹐这点以后会单独开讲

 

 

 

 

 

 

 

1.1.2 .5数组

数组的类型值可以是空值或者指向另一数组的实例﹐数组中的元素类型是任意的﹐数组的类型也是任意的。

数组的匹配﹐不能扩展到数值类型的数组﹐不能把int[]当成Object[]

数组的初始化﹐可以有多种形式﹐域声明﹑局部变量声明﹑数组生成表达式

int[] a = {0,2,4,6,8};int[] a = new int[]{0,2,4,6,8};是等价的

int[,] b = {{0,1},{1,2}};

int[,] b = new int[3,2];

当数组生成表达式包括直接的维数长度和数组的初始化时﹐长度必须是常数表达数

int i=3;

int[] a = new int[i]{0,1,2};这种声明是错误的﹐int[] a = new int[i];是对的

1.1.2 .6委托类型(Delegate)

是指向静态方法或者是对象实例以及对象实例方法的一种数据结构﹐有点象C++中的函数指针﹐但是区别很大

这点以后开讲

1.1.3 装箱(Boxing)和拆箱(Unboxing)

这是C#类型系统的核心﹐这种机智可以在值变量和引用变量之间建立联系﹐是两者可以互换﹐从而建立统一的系统类型。

int i=111;

object  o  =  i; //隐式装箱
object  o  =  object(i); //显式装箱, o is int  为真

int j = (int)o; //拆箱

1.2变量

变量代表存储地址﹐每个变量都有类型﹐决定存储什幺样的值和存储方式﹐C#是安全类型语言﹐一个变量的值在可以获取之前必须先分配地址﹐变量可以分为有初始值和没有初始值两种。

         1.2.1 变量的种类

         静态变量﹐static修饰符定义的变量﹐生存周期为从类的装载到卸载

         实例变量﹐不包含static修饰符定义的变量,如public string str;

         数组元素﹐数组中元素在数组创建时才存在﹐并且在引用没有指向数组实例时被终止

         值变量﹐ 没有refout修饰符的变量

引用变量﹐有ref修饰符的变量是引用变量﹐引用变量不创建一个新的存储地址﹐它和调用的变量指向同一个地址﹐函数调用时候必须赋初始值﹐类似于C++的指针变量

输出变量﹐有out修饰符的变量是输出变量﹐输出变量不创建一个新的存储地址﹐它和调用的变量指向同一个地址﹐函数调用中候必须赋初始值﹐类似于C++的指针变量

         局部变量﹐块语句中如for等的变量定义﹐它不会自动初始化

         class a

{

         public static int x;  //静态变量

         int y;  //实例变量

         void f(int[] v,int a, ref int b,out int c)   //v[0]是数组元素﹐a是值变量﹐b是引用变量﹐c是输出变量

         {    int i=1;  //局部变量

              c=a+b++;

         }

}

         1.2.2 默认值

         值变量的默认值是类型默认构造器指定的值

引用变量的默认值是null

         1.2.3 明确的赋值变量

              static void f()

         {

              int i,j;

              try

              {i = 1;}

              catch

              {i = 1; j = 1;}

               //i明确赋值而j没有

         }

                   需初始化赋值变量

l           静态变量

l           类实例中的实例变量

l           初始化赋值的结构变量的实例变量

l           数组元素

l           值变量

l           引用变量

不许初始化赋值变量

l           结构变量的实例变量

l           输出变量

l           局部变量

2语句

2.1using

它可以得到一个或多个资源﹐执行一个语句﹐然后释放资源

using (R r1 = new R())

{r1.f();}

和下面是等价的

R r1 = new R();

try

{r1.f();}

finally

{if(r1 != null)((IDisposable)r1).Dispose();}

 

 

 

 

 

 

 

2.2goto

不建议使用

void f(int x)

     {

         if(x>0) goto x;

         x=-x;

         x:return x;

}

2.3声明语句

局部变量声明:int x = 1; ,局部常量声明: const int x = 1;

2.4选择语句

ifswitch

2.5循环语句

forforearchwhiledo while

2.6跳转语句

breakcontinuegotoreturnthrow

2.7try

2.8checkedchecked

用于控制整型类型的运算和转换的溢出检查﹐checked作用在块上﹐unchecked作用在表达式上

2.9lock

它获得一个给定对象的互斥锁﹐执行一个语句﹐然后释放这个锁

lock(...)

当于

     try

     {...}

     finally

{System.Threading.Monitor.Exit(....);}

 

最后希望你能养成良好的变成习惯

在一个二元操作符的每一边都加一个空格 string c = new string();不要string c=new string();

在每一个逗号后面而不是前面加一个空格 void f(int i, int j) 不要f(int i,int j)

一行一个语句 哪怕分支语句内容只有一句也应使用{}

分号前不要有空格 string c = new string();不要string c = new string() ;

函数的园括号和参数之间不加空格 void f(int i, int j) 不要void f( int i,int j )

在一元操作符和操作数之间不加空格 i++;不要i ++;

区分大小写

字符值必须用单引号表示,字符串必须用双引号表示 

char a = ‘c’;  string c = test;  string[] b = c.Split('*');

变量名不能以数字开头 int 0c ;是错误的

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值