基础数据类型
C#中,最常见的两大数据类型是值类型和引用类型。值类型也可称之为基础数据类型,包含简单类型,枚举类型,结构类型三种。 引用类型包括字符串类型,数组类型,类类型,对象类型,接口类型 和代理类型。
总结:1.值类型数据固定在栈上,引用类型固定在托管堆上。(所有堆都是托管堆)
2.引用类型的值放在托管堆的,引用类型名放在栈上。(C#一般不用指针类型,太麻烦了)。
标识符和关键字
1. 首字母只能是下划线,字母和@符号,不能是数字
2. 标识符只能包含字母,数字,下划线。
3. 不能是c#关键字
4. 注意:C#中char是占两个字节(16位)的。
转换类型:1.隐式转化2.显示转化
1.隐式
精度低的向精度高的转换
例:Console.WriteLine(3 + 3.2);
2.显式(3种)
//1.(int)
double d = 22.3;//默认为double类型
int b=(int)d;
Console.WriteLine (b);
//2.(ToInt32)
int c = Convert.ToInt32 (d);
Console.WriteLine (c);
//3.(Parse)
string s="1234";
string s3="23.5";
int e = int.Parse (s);//Parse只接收字符类型。
//int f = int.Parse (d);错误
//string s1="12344fc";错误,不能转,字符串里内容只能是数字
double t = double.Parse (s3);
Console.WriteLine (t);
字符类型
//可以通过下标来访问(和数组类似),但是是不可变序列(值不能改变,但可以改变指向)
string str="hello world";
Console.WriteLine (str[4]);
str="Hello";
Console.WriteLine (str);
引用类型(变量放在栈上,指向的内存放在托管堆上,类似于c++中的指针)
枚举类型(不能在方法内部声明)
enum Gender { Female=10, Male }
Gender q=Gender.Female;
Console.WriteLine (q);//输出为枚举变量名。
Console.WriteLine((int)q);//强制把枚举类型转化为int类型,也可以将int类型转换为枚举类型(枚举变量名)。
结构体
struct Apoint { public int x;//不加public,则默认私有 public int y; //构造函数, public Apoint(int _x,int _y) { x = _x; y = _y; }
//使用方法1:(不常用)
Apoint a;
a.x = 20;
a.y = 30;
Console.WriteLine (a.x);
Console.WriteLine (a.y);
注意:使用之前必须给结构体的变量赋值。
//使用方法2:(一般使用这种方法)
Apoint ap = new Apoint ();
Console.WriteLine (ap.x);//0
Console.WriteLine (ap.y);//0
注意:new一下会给构体提供一个默认的构造方法初始化变量
Apoint ap2 = new Apoint (1,2);
Console.WriteLine (ap2.x);
Console.WriteLine (ap2.y);
注意:1.自己写了构造函数,系统提供默认构造函数不会消失的(和class不同),结构体的特性
2.结构体里必须把所有变量进行赋值(否则用的时候会出错)
数组类型
int[] a=new int[5];
int[] b=new int[]{1,2,3,4,5};
int[] c={1,2,3,4,5};//b和c,没有区别。两种写法(new只是新建一个类型,与c++不同)
for(int i=0;i<5;i++)
Console.WriteLine (c[i]);
for(int j=0;j<b.Length;j++)//b.Length表示数组的长度
Console.WriteLine (b[j]);
foreach (int element in b) {//类似于int element=b[i],循环lenth次
Console.WriteLine (element);
}
string[] str = new string[]{ "a", "b", "c" };
foreach(string item in str)
Console.WriteLine (item);
变量和常量
//常量:1.声明同时进行初始化
2.常量默认是static类型,所以不能和static类型一起使用(静态区包括常量区,而常量是在常量区存储的)
3.常量值不能被修改
重载操作符
<span style="font-size:12px;">public static Apoint operator+(Apoint ap1,Apoint ap2) { <span style="white-space:pre"> </span>Apoint ap = new Apoint (); ap.x = ap1.x + ap2.x; ap.y = ap1.y + ap2.y; return ap; } public override string ToString ()//override重写方法 { return string.Format("x:{0},y:{1}",x,y);//拼接 }</span>
//c#中重载操作符的操作数所有必须是自定有类型(比如+号,两个必须是自定义的)
Apoint ap1=new Apoint(100,200);
Apoint ap2 = new Apoint (1, 2);
Apoint ap = ap1 + ap2;
Console.WriteLine (ap);
//注意:1.公有静态
// 2.每个操作数都是自定义类型
// 3.下标不能重载