C#笔记②

一、实例构造器(instance constructor)

Yuan yuan=new Yuan();
就是实例一个对象时候所做的操作
构造器是一个没有返回值,连void都没有的方法

点击查看代码
            public Yuan()
            {
                
            }

但他可以带入参数

Yuan yuan=new Yuan(2);

点击查看代码
            int x;
            public Yuan(int a)
            {
                this.x=a;
            }

构造器会执行以下操作:

  • 对类字段进行初始化,若构造器中有赋值,则初始化为那个值的量
  • 对类型进行切割,放在堆中

ctor快捷创建实例构造器


二、Stack Frame

谁调用谁压数进栈,若是Main调用了某带有参数的方法,则把对应的参数类型对应空间压进栈中,归Main管。

返回值一般在CPU的寄存器中。

三、new也是一种操作符

new的功能:
在内存中创建一个实例并调用构造器,若左边有赋值语句则将内存编码赋予变量名所对应的内存空间中

(后面可接初始化器)

new xx() { }

使用new时要小心紧耦合,如果这个实例出问题了,那么整个Main都无法执行。

四、匿名函数

  1. 使用new的匿名函数
点击查看代码
var x=new{Name="Ok",Age=19};
  1. 使用delegate(一般用于委托,不用于匿名)的匿名函数
点击查看代码
       x+=delegate(double a,double b)
       {
           return a+b;
       };
  1. 使用拉姆达(Lambda)表达式
点击查看代码
x+=(a,b)=>{return a+b;};
	//属性+=(形参)=>方法

五、checked操作符

一般检测error,搭配try、catch出现。

点击查看代码
            uint x=uint.MaxValue;
            try
            {
                uint y=checked(x+1);
                System.Console.WriteLine(y);
            }
            catch (OverflowException ex)
            {

                System.Console.WriteLine("Overflow");
            }

也可以写成

点击查看代码
            uint x=uint.MaxValue;
            checked
            {
            try
            {
                uint y=x+1;
                System.Console.WriteLine(y);
            }
            catch (OverflowException ex)
            {
                System.Console.WriteLine("Overflow");
            }

编译器默认unchecked

六、default取默认值操作符与sizeof取字节操作符

default用于取默认值时,结构体一般为0,引用类型为null,枚举为索引为0的那个数据。

sizeof一般只能用于取结构体数据类型字节,若要取类的字节,要在Unsafe中取

七、~按位取反操作符

八、二进制转化操作符

  • &对为取与

  • |对位取或

  • ^按位异或(不一样为真)

九、?与??null值合并操作符

一般值类型一般不能为空
但可以引入可空类型 <泛型>
Nullable<int> x =null;
相当于
int ? x=null;
?用在对象后面相当于,若对象不为空则返回某成员,空则返回null
stu=stu?.ID;

null值合并??操作符

如果x为null,则y赋值为1
            int ?x=null;
            int y=x??1;       //如果x为null,则返回1,否则返回x

十、隐式转换(implicit)与显式转换(explicit)

隐式转换(implicit):

  1. 不丢失精度(小类型数据到大类型数据)
    (long x=int y)
  2. 子类向父类的转换
    (父类 xx=子类 yy)
  3. 装箱
    image

显式转换(explicit):

  1. 有可能失去精度,即cast(大类型数据到小类型数据)

(Type)x

  1. 拆箱

  2. 使用Convert类

  3. Tostring

点击查看代码
            int x=100;
            int y=100;
            int z=x+y;
            string b=z.ToString();
            System.Console.WriteLine(b);
  1. .Parse方法
    解析传进来的数据类型
    double x=double.Parse("200.5");

  2. .TryParse方法

自定义:

显式转换
    class Program
    {
        static void Main(string[] args)
        {
            Stone stone=new Stone();
            stone.Age=5000;
            Monkey sunWuKong=(Monkey)stone;
            System.Console.WriteLine(sunWuKong.Age);     
        }


        class Stone
        {
            public int Age;
            public static explicit operator Monkey(Stone stone)
            {
                Monkey m=new Monkey();
                m.Age=stone.Age/500;
                return m;
            }
        }
       
       class Monkey
       {
           public int Age;

       }
    }
   
隐式转换
    class Program
    {
        static void Main(string[] args)
        {
            Stone stone=new Stone();
            stone.Age=5000;
            Monkey sunWuKong=stone;
            System.Console.WriteLine(sunWuKong.Age);     
        }


        class Stone
        {
            public int Age;
            public static implicit operator Monkey(Stone stone)
            {
                Monkey m=new Monkey();
                m.Age=stone.Age/500;
                return m;
            }
        }
       
       class Monkey
       {
           public int Age;

       }
    }
   
posted @ 2022-02-01 22:13  Ariaaaaa  阅读(5)  评论(0)    收藏  举报