您的位置:首页 > 编程语言 > C#

C#语法基础

2011-09-19 15:54 253 查看
C#严格区分大小写

单行备注的方法为在备注信息前加入 // 符号

多行备注的方法为 /*多行备注信息*/

给函数增加备注的信息的方法
///<summary>
///函数注释
///</summary>

分号作为语句的结束符

{} 将多个语句括在一起作为一个语句组

变量的声明格式:
int i=0;

常量的声明格式:
const string str="字符串";

常用数据类型:
int  -2147583648~2147483647之间的整数
byte  0~255之间的整数
short  -32768~32767之间的整数
long  -9.2e18~9.2e18之间的整数
float  单精度浮点数
double  双精度浮点数
decimal  128位的固定小数点数值
char  单个16比特位的Unicode编码字符
string  可变长的Unicode编码字符串
bool  布尔型

算数操作符包括:加(+),减(-),乘(*),除(/),取余(%)

逻辑运算符包括:与(&&),或(||),非(!)

关系运算符包括:大于(>),大于等于(>=),小于(<),小于等于(<=),不等于(!=),等于(==)

int,long和decimal除0会报错,double和float除0.0的值是Infinity(无穷大),唯一例外是0.0/0/0的值似乎NaN,NaN和Infinity与其他值的计算结果都是自己,唯一,例外是Infinity*0的结果为0

递增和递减操作符为:a++,a--,++a,--a

以var关键字声明的变量称为隐式类型,在声明的同时必须初始化,根据初始值自动推断数据类型,不可再改变数据类型

string类型的值转换为数值类型,通常使用"数据类型.Pares()"方法,其它类型转换为字符串类型则用"ToString()"方法

三目运算符使用方法:b=(a>0)?a:a++

if语句
if(a>0){}
else if(a=0){}
else {}

Switch语句只能判断int或string类型的数据,case标签值只能是常量
switch(str)
{
  case "字符串1"
    str="a";
    break;
  case "字符串2"
    str="b";
    break;
  default:
    str="c";
    break;
}

for语句
for(int i=0;i>5;i++){}

foreach语句
foreach(string str in arrayStr) {}
foreach循环不可对数组或集合中的数据进行修改.

while语句
while(a>0) {}

do while语句
do
  a+=1;
while(a<10);

函数和过程不执行return后的内容,定义方法:
public int GetCount(int i)
{
  return i+100;
}
public void Megbox(int i)
{
  MessageBox.Show(i.ToString());
}

错误处理
try
{}
catch(Exception ex)
{}
finally
{}

使用throw抛出异常
throw new ArgumentOutOfRangeException("提示错误内容");

一个类被拆分到多个文件中时需在定义类时加入partial关键字

如果把一个方法或字段声明为static,则为静态方法或字段,可以使用类名来调用

静态类只能包含静态成员

匿名类格式如下:
var TempObj=new {a="abc",b=123};
匿名类只能包含public字段,字段必须初始化,不可是static字段,而且不能在其中指定任何方法.C#编译器根据字段的名称,类型,数量和顺序来判断匿名类的两个对象是否相同.

创建对象
TempClass TempObj=null;
TempObj=new TempClass();

TempClass TempObj=new TempClass();

const字段同时也是static字段

所有的基本数据类型统称为值类型,对象,数组和集合为引用类型.值类型存储在栈内,引用类型存储在堆内(引用本身还是在栈上).

可空的值类型
int? i=null;
可空值类型可以空值判断,如:if(i==null),可空类型为引用类型

ref和out关键字
加入ref关键字的参数修改的同时将同时应用于实参
加入out关键字的参数修改的也同时将同时应用于实参,而且必须字函数内部赋值

可用System.Object创建变量,该变量能引用任何引用类型,System.Object可以简写为object

将一个数据从栈自动复制到堆的行为称为装箱,两个值的改变不会相互影响

将引用了装箱值的object引用强制转换成值类型称为拆箱,如:
int i=(int)a;

枚举类型
enum abc{a,b,c}
abc eTemp=abc.c;
枚举类型的变量只有赋值之后才能使用,枚举内部默认每个元素对应一个整数值,第一个元素默认为0,以后每个元素递增1,也可以改变元素对应的整数值,如:
enum abc{a=1,b,c}

某些时候类中只包含极少数的数据,因此管理而造成的开销显得极不合算,在这种情况下,更好的做法是将类型定义成一个结构体,结构体是值类型,可以包含字段,方法,构造函数.不能为结构体声明默认构造函数,不能在声明一个实例字段的同时初始化,不能继承.

数组的使用方法:
int[] p=new int[5]; 或
int[] p=new int[3]{1,2,3}; 或
int[] p={1,2,3};
数组创建的同时初始化可省略new关键字和数组大小.
数组的大小可以不是常量,如: int i=3+1; int[] p=new int[i];
复制数组的方法:
int[] p={1,2,3}; int[] p2=new int[p.Length]; p.CopyTo(p2,0); 或:
int[] p={1,2,3}; int[] p2=(int[])p.Clone();
这些复制数组的方法为浅拷贝,只是复制引用,不会复制被引用的对象,如果想复制引用的对象就必须在for循环中编写.

集合的元素类型是object,比数组更容易解决元素的插入和移除.
Arraylist集合类的使用方法:
using System.Collections;
Arraylist al=new Arraylist();
al.Add(123); //增加一个元素
al.Insert(al.Count-1,234); //在al的倒数第二个位置插入一个元素,参数1是位置,参数二是元素值
al.Remove(123); //移除值为123的元素
al.RemoveAt(0); //移除索引为0的元素
Queue集合类用于先入先出的队列,例:
q.Enqueue(123); //增加一个元素
q.Dequeue(); //移除元素,返回值为移除的元素值
Stack集合类用于后入先出的队列,例:
s.Push(123); //增加一个元素
s.Pop(); //移除元素,返回值为移除的元素值
Hashtable结合用于带键值的队列,没一个元素都b包含一个key对象和一个value对象,不可有重复的key值,例:
Hashtable ht=new Hashtable();
ht["a"]=1;
ht["b"]=2;
foreach(DictionaryEntry de in ht)
{
string name=(string)de.key;
int i=(int)de.Value;
Console.WriteLine("name:{0},i:{1}",name,i);
}
SortedList集合类用于总是排序的带键值队列,key不可重复,总是根据key来排序,使用方法同Hashtable;
创建集合的同时可以初始化,例:
Arraylist al=new Arraylist(){1,2,3};
Hashtable ht=new Hashtable(){{"a",1},{"b",2}};
集合与数组的差异有:
1,数组要声明它所容纳的元素的类型,集合不需要,因为集合以object形式存储元素.
2,数组是固定大小,集合更具需要动态改变大小.

声明一个object类的派生类:
class NewObject:object {}

在派生类中方法前加override关键字让它重写基类中加virtual的虚方法

扩展方法是在不生成新的继承子类的情况下增加一个类型的方法,比如适用于结构体的扩展,例:
static class TempClass
{
  public static int NewM(this int i)
  {
    return -1;
  }
}
使用时只要引用类所在的命名控件,该类型的元素就可以使用该方法,如:
int x; Console.WriteLine("x.NewM{0}",x.NewM());
注:方法的第一个参数必须是要扩展的类型,必须在参数前面增加this前缀.

接口用来定义一种程序的协定,实现接口的类或者结构需要与接口的定义严格一致,接口好比一种模版,它定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用.
接口不能被实例化,类可以实现多个接口并且通过这些实现的接口被索引,接口的变量只能索引实现该接口的类的实例.
声明接口使用interface关键字,接口中的方法不能指定修饰符.
接口不允许包含属性,构造函数,析构函数.不可从类中继承一个接口,虽然一个接口能从另一个接口继承.
为了实现一个接口需要声明一个类或者结构,让它们从接口继承,并实现接口指定的全部方法,方法名,参数和返回类型要完全匹配.

在类的声明时加入abstract关键字,则该类为抽象类,该类不能被实例化.
如果在抽象类的方法加入abstract关键字则方法为抽象方法,方法只能在子类中实现.

在类的声明时加入sealed关键字则该类为密封类,密封类不可被继承.
如果在密封类的方法加入sealed则方法为密封方法,该方法在派生类不可被覆盖.

构造函数名与类名相同,析构函数名为在类名前加入 ~ 符号

在对象声明时加入using关键字可控制对象的生存周期,如:
using (TempClass TempObj=new TempClass())
{
  TempObj.a=1;
}

声明一个可读写的属性
class TempClass
{
  public int x
  {
    get
    {
      //读操作
    }
    set
    {
      //写操作
    }
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: