美文网首页C#学习的心得笔记
刘铁猛C#(11)操作符详解(下)

刘铁猛C#(11)操作符详解(下)

作者: 北欧的蓝天 | 来源:发表于2019-10-25 09:01 被阅读0次

    New 操作符

    不仅是个关键字,也是操作符,用于创建实例,是实例构造器的操作符。

    1)new 可以创建一个类型的实例,并且立即调用这个实例的实例构造器 ( );

    2)new 还能调用实例的初始化器 {  },在初始化器中为实例赋值

    初始化器中,可以初始化多个属性。

    new和“.” 都是操作符,不是赋值,从左到右执行。因为没有引用变量引用它,很快就会被内存垃圾收集器收回。在后面也无法再去访问这个实例,所以只用于一次性的操作。使用实例初始化器,才可以再次调用。

    3)new 可以为匿名类型创建对象

    int 显式类型的变量,显示了变量的类型

    var person = new { Name = "Kim", Age = 34 };

    var 声明隐式类型的变量,变量类型不知,赋值时由编译器决定。

    自动推断难以定义的类型,想写都写不出来, 如person,才能显示var的强大功能。

    e.g. var x = 100;

    var person = new {Name = "Kim", Age = 34};

    Console.WriteLine(person.Name);

    Console.WriteLine(person.Age);

    Console.WriteLine(person.GetType().Name);

    <>f__AnonymousType  是约定的前缀

    0 指在程序中创建的第一个

    `2 指这个类型是一个泛型类,需要两个类型来构成它(能猜出来,这个例子中是 string,int)

    4)使用new操作符,有一定的危险性,一旦在类里调用new操作符,创建了一个实例,那么正在编写的这个类型,就和创建实例的类型,之间就构成了非常紧密的耦合。

    如:在Program类中,用new创建了Form类型的实例 Form()。此时,Program类和Form类,就紧紧的耦合在一起。如果在系统中,把Form类移除掉,Program类就会彻底无法运行。换言之,Program类,以紧耦合的方式,依赖在了Form类上。

    依赖注入(Dependency Injection,简称DI)设计模式,就是把紧耦合,变成相对比较松的耦合。

    new关键字的多用性

    class Student

            {

                public string Name;

                public int Score;

                public void Report()

                {

                    Console.WriteLine("A Student");

                }

            }

            class CsStudent : Student

            {

            }

                Student student = new Student();

                student.Report();

                CsStudent csStu = new CsStudent();

                csStu.Report();  //会打印出两个“A Student”,因为CsStudent继承了Student

    如果:

    class CsStudent : Student

            {

                new public void Report()          //new是修饰符

                {

                    Console.WriteLine("A CS Student");

                }

            }

    打印出

    A Student

    A CS Student

    -> 指针访问对象成员操作符(以后再补)

    直接操作内存,要注意上下文安全

    sizeof (以后再补)

    默认情况下只能获取基本数据类型的内存字节数,除了string 和 object 的那些关键字数据类型。因为默认情况下,sizeof只能获取 结构体类型 的数据在内存中所占的字节数,而 string 和 object 不是结构体。

    在非默认情况下,sizeof 可以获取 非结构体类型 的数据在内存中所占的字节数,但是要注意上下文的安全性。

    checked 和 unchecked (以后再补)

    checked:检查有没有数值溢出

    输出2进制结果,32个1

    由于内存溢出,所以输出值会变为0. (二进制32个1+1,进位后溢出,就是0)

    检验溢出

    unchecked:不用检查有没有数值溢出

    一元操作符

    只要有一个操作数跟在操作符后面,就可以形成表达式。

    1)

    相关文章

      网友评论

        本文标题:刘铁猛C#(11)操作符详解(下)

        本文链接:https://www.haomeiwen.com/subject/rfijvctx.html