2.7 C# static/构造方法与类/结构和类/枚举/垃圾回收机制/面试题/显示实现接口/秒表

1. static 字段

1>Person类)*如果一个非静态类中有实例构造方法和静态构造方法 

* 在类进行实例化的时候回先执行静态构造方法再执行实例构造方法  因为静态构造方法只能初始化静态字段或者属性而静态字段或者属性具有共享性  必须在非静态构造方法前进行实例化

* 无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

* 静态的构造方法属于类   非静态的构造方法属于实例

public Person()(实例构造)static Person()(静态构造)public static void Print()person类)

2>(TestStatic1)//静态类中不能有实例方法  静态类中的构造方法只能是静态的

        //public TestStatic1()

        // 静态类中静态构造方法不能出现访问修饰符

         * 静态类中的静态构造方法  在类被调用的时候就会自行执行  不需要自己调用

         * 在程序运行中  如果静态类被调用了多次  静态构造方法只被调用一次

static class(静态类)(静态方法)

/* 静态构造方法是无参的  因此我们明白静态构造方法是没有重载特性的   并非所有的方法都可以进行重载       

         * 静态构造方法不能被继承  所有的构造方法都不可以继承

         * 补充:

         * 并非所有的方法都有返回值类型

         * 并非所有的方法都有方法体

         * 并非所有的方法前面都有访问修饰符

         * 并非所有的抽象方法使用abstract修饰

         * 并非所有的方法前面都有public访问修饰符才能被外界访问

        //static TestStatic1( int num)

         /* 静态类中只能声明静态方法

         * 如果类中没有显示的写出静态构造方法  而直接调用了静态类中的静态字段那么就会自行调用默认的静态构造方法      

         * 我们无法直接调用静态构造方法

         */

        publicstaticvoid Test()       

        {   //任何的静态类调用静态方法  都是类名.方法名(参数列表);   只不过在静态类本类中调用本类中的方法省略了前面的类名而已

            //下面两种使用方式等效

            TestStatic1.Test2();

            Test2();   }

        staticvoidTest2()

        {       }

        //静态类中不能声明实例方法

        //public void Test()

        //{        //}

2.结构(struct PrintStuct)结构类

1>结构始终会默认生成一个无参构造,即使该结构已经显示的写出了有参构造

2>结构用于轻量级数据的存储  因为结构是值类型  值存储在栈中  栈的空间比较小

3>类用于存取复杂的数据  虽然存取速度比较慢但是可以保证内存的利用率  减轻内存栈的压力

2.7 C# static/构造方法与类/结构和类/枚举/垃圾回收机制/面试题/显示实现接口/秒表_第1张图片(Main方法的输出  判断对象数量)


3.如何选择结构还是类

1>堆栈的空间有限,对于大量的逻辑的对象,创建类要比创建结构好一些

2>结构表示如点、矩形和颜色这样的轻量对象,例如,如果声明一个含有 1000 个点对象的数组,则将为引用每个对象分配附加的内存。在此情况下,结构的成本较低

3>在表现抽象和多级别的对象层次时,类是最好的选择

4>大多数情况下该类型只是一些数据时,结构时最佳的选择

4.     枚举


 string[] names = Enum.GetNames(typeof(DayOfWeek));
            for (int i = 0; i < names.Length; i++)
            {
                Console.WriteLine(names[i]);
            }
            int [] nums=(int[])Enum.GetValues(typeof(DayOfWeek));
            for (int i = 0; i < nums.Length; i++)
            {
                Console.WriteLine(nums[i]);
            }
            Console.WriteLine(Enum.Parse(typeof(DayOfWeek),"1"));

            Console.WriteLine(typeof(Program));

1>枚举名字能不能以数字开头   和标识符的命名规则是一样的

2>枚举的编号默认从0开始

3>每一个枚举的值 不可以对应浮点数

Typeof(类型 暂时不考虑)getnames/getvalues(获取typeof里枚举的值)

4. 垃圾回收机制(null:零;无效的)

1>构造方法在程序运行 时候最先执行    析构方法在类被销毁之前运行

2>在析构方法中我们通常操作:保存当前程序的进度 或者是关闭文件流或关闭数据库

3>垃圾回收是在声明当前的作用域生命周期结束后才对当前作用域中的变量进行销毁   如果在内存栈中没有保存引用 那么回收堆中的空间

2.7 C# static/构造方法与类/结构和类/枚举/垃圾回收机制/面试题/显示实现接口/秒表_第2张图片

public ststring Name{get:set}   //prop+tab*2

5.命名空间

6.索引器

7.显示实现接口

8.运算符的重载

9.只读字段

10.const只能修饰值类型和string 类型

const属于编译时变量

readonly只用于局部变量

readonly 关键字与 const 关键字不同。

1. const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。

2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。

3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。

4.const 对于引用类型的常数,可能的值只能是 string 和 null。

readonly可以是任何类型

11结构和类的区别

结构始终会默认生成一个无参构造  即使结构已经显示了一个有参构造

12面试题:静态构造方法是无参的,因此静态构造方法是没有重载特性的

(空字符串)

显示实现接口:(两接口用逗号隔开)用于区分相同方法 不同接口名报错后 显示实现接口{区分不同接口中出现的相同的方法(方法三要素:返回值类型  方法名 参数列表)问题}

             string str1 = " ";
            string str2 = "";
            //这种形式上的空字符串,并不够成字符串,.NET平台提供string.empry
            string str1 = String.Empty;

            string str2 = String.Empty;

13.用秒表来测时间

 float ret=0;
            //创建一个秒表
            Stopwatch sw = new Stopwatch();
            sw.Start();
            for (int i = 0; i < 100000; i++)
            {
                ret+= i;
            }
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);

你可能感兴趣的:(C#基础,垃圾回收,C#/c,Shap笔记)