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

刘铁猛C#(11)操作符详解(下)_第1张图片

New 操作符

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

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

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

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

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

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

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

刘铁猛C#(11)操作符详解(下)_第2张图片

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类上。

刘铁猛C#(11)操作符详解(下)_第3张图片

依赖注入(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

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

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

刘铁猛C#(11)操作符详解(下)_第4张图片

sizeof (以后再补)

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

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

checked 和 unchecked (以后再补)

checked:检查有没有数值溢出

输出2进制结果,32个1

刘铁猛C#(11)操作符详解(下)_第5张图片

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

检验溢出

刘铁猛C#(11)操作符详解(下)_第6张图片

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

一元操作符

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

1)

你可能感兴趣的:(刘铁猛C#(11)操作符详解(下))