寂寞的风永不搁浅

学习之初 多为转载 未名出处 敬请见谅 点滴积累 必有作为

博客园 首页 新随笔 联系 订阅 管理

基础知识
一、 变量
简单整型类型
类型 .NET Frramework 中别名 允许的值
sbyte System.SByte -128~127
byte System.Byte 0~255
short Sytetem.Int16 -32768~32767
ushort System.UInt16 0~65535
int System.Int32 -2147483648~2147483647
uint System.UInt32 0~4294967295
long System.Int64 -9223720306854775808~9223382036854775807
ulong System.UInt64 0~18446744073709551615
简单浮点数
类型 .NET Frramework 中别名 m e
float System.Single 0~224 -149~104
double System.Double 0~253 -1075~970
decimal System.Decimal 0~296 -26~0
其他类型 
类型 .NET Frramework 中别名 允许的值
char System.Char 一个Unicode字符,存储0~65535之间的整数
bool System.Boolean true或false
string Sytem.string 一组字符串
二、常量
常量具有如下特征
 常量必须在声明时初始化,指定了其值后就不能再改变了.
 常量的值必须能在编译时用于计算。不能用从一个变量中提取的值来初始化常量,如果要这么做应使用只读(readonly)。
 常量是静态的,不允许在常量声明中包含修饰符 static。
三、 值类型与引用类型
值类型存储在栈中,引用类型存储在托管堆中。C#中基本数据类型都是之类新,如果声明一个bool变量,并给它赋予另一个bool变量的值,内存中就会有两个bool值。如果以后修改第一个bool变量,第二个bool变量的值不会改变。这些类是通过值来复制的。
大多数复杂的c#数据类型包括我们自己声明的类都是引用类型。他们分配在堆中,其声明周期可以跨越多个函数调用。可以通过一个或几个别名来访问。CLR执行一种精细算法,来跟踪哪些变量仍是可以访问的,哪些引用变量已经不能访问了。CLR会定期删除不能访问的对象,把他们占用的内存返回给系统,这是通过垃圾收集器实现的。
如果要把自己的类型定义为值类型,就应声明它为一个结构。
四、 类型转换
类型转换有两种:
 隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行的规则非常简单,可以让编译器进行。
 显示转换:从类型A到类型B的转换只能在某些情况下进行,转换的规则比较复杂,应进行某种类型处理。
隐式转换的规则是:任何类型A只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。
使用Vonvert.To***,总是进行溢出检查,checked和unchecked关键字以及项目的属性设置没有什么用。
五、装箱和拆箱:

任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如: 
int i = 10;
object obj = i; //隐式装箱
object obj = object(i); //显式装箱
if(obj is int) //int
  Console.WriteLine(“OK”);
Console.WriteLine(obj.GetType()); //System.Int32
有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;
有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:
int i = 10;
object obj = i;
int j = (int)obj;
六、 字符串
sting类型可以看作是char变量的只读数组。但是不能为字符串中的各个字符赋值.
string myString = “A string”;
char myChar = myString[1];
char [] myChars = myString.ToCharArray();
string misting2= myString.ToLower();//ToUpper();不会改变原字符串.
string misting2= myString.Trim();//.TrimStart();.TrimEnd()
char[] trimChars={‘ ’,’1’};
string misting2= myString.Trim(trimChars);//删除指定字符串,无参数删掉空格
string myString = “A string”;
string myString = myString.PadLeft(10,’*’);// PadRight(10,’*’)添加到字符串的某一侧补位
string myString=”This is test !”;
char[] trimChars={‘ ’};
string [] myWords = myString.Spilt(trimChars);//使用分隔符时,删除了分隔符


必须用双引号把字符串括起来股指给字符串变量。使用\”来转移双引号。可以在字符串中使用回车换行的转义序列即\n。
Console.WriteLine(“{0}{1}”,myString1,myString2);
字符串实际上是插入变量内容的一个模板,字符串中的每队花括号都是一个占位符,包含列表中每个变量的内容。每个占位符(或格式字符串)用包含在花括号中的一个整数表示,以0开始,每次递增1。
string是引用类型,在把一个字符串赋给另一个字符串时,会得到对内存同一个字符串的两个引用.但是,如果修改了其中一个字符串,就会创建一个全新的string对象,而另一个字符串不会改变.
七、枚举
enmu orientation:byte
{
North = 1,
Sourth = 2,
East = 3;
West = 4
}
orientation myDir = orientation.North; //myDir=North
byte dirbyte = (byte)myDir; //1
string dirstring =Conver.ToString(myDir) ; // North;也可以Convert.ToString但不能(string)
string myString = “West”;
orientation newDir = (orientation)Enmu.Parse( typeof(orientation), myString)
可以使用一个值作为基础,可以为多个枚举指定相同的值.没有赋值的任何值都会自动获得一个初始值,使用的值是从比最后一个明确的值大1开始的 。

八、命名空间
Namespace myNameSapce
{
  using NT = namespaceTwo; //别名 使用NT::类名
}
九、表达式
尽可能使用&&和||,会一定程度上提高性能。
^ 如果操作数中相同位置上的位有且只有一个是1,结果是1。
switch (myInteger)
{
  case <1>:
  case <2>: 
  // do something  
}
实际上一次检查多个条件,如果满足这些条件中的任何一个,就会执行多个代码。
do 
{}while();
do while 语句while后面必须要有分号。
十、数组
数组在访问前必须初始化,初始化有两层含义,指定大小(分配空间),指定内容。
int myInt = {1,2,3}; //同时指定大小和内容
int myInt = new int[3]; //显示指定了大小,new会赋默认值
int myInt = new int[5]{1,2,3}; //失败 大小必须与元素个数匹配
int myInt = new int[arraySize];// arraySize可以是变量
int myInt = new int[arraySize][1,2,3,4];// arraySize必须是常量
double [,] myInt = new double [3,4];//初始化多维数组
double [,] myInt = {{1,2,3}, {1,2,3}};//初始化多维数组
int [][] jaggeInArray = new int [3][];
jaggeInArray={{1,2,3},{1, 3},{,3}}//不可以这样初始化
jaggeInArray[0] = new int [3];
jaggeInArray[1] = new int [2];//可以这样 必须一声明子数组的形式初始化
int [][] jaggeInArray = {new int []{1,2,3}, new int []{1,2}}//也可以这样初始化






posted on 2008-12-10 23:00  景阳  阅读(544)  评论(0编辑  收藏  举报