c#学习历程1

 

基础数据类型

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.下标不能重载

原文地址:https://www.cnblogs.com/shuaigezhaoguang/p/5847238.html