using System;
using System.Collections.Generic;
using System.Text;

namespace 继承_static_结构体_2048核心类
{
class Student : Person
{
//prop +tab +tab 自动属性快捷生成
///


/// 成绩
///

    // 实例成员属于   对象    静态成员属于   类

    public int Score { get; set; }

    //每个对象都存储一份
    public int InstanceCount;

    

    //静态字段 仅仅存储一份 所有对象共享 常驻内存中
    public static int StaticCount;

    private Random random;
    private int[] arr;

    //实例构造函数:提供创建对象的方式,初始化类的实例数据成员
    //
    public Student()
    {
        random = new Random();
        arr = new int[5];
        InstanceCount++;
        StaticCount++;
    }

    //静态构造函数 不需要访问修饰符 都可以访问
    //作用:初始化类的静态数据成员
    //执行时机:类加载时调用一次
    static Student()
    {
        //InstanceCount++;//”非静态字段 要求 对象引用 ”  静态代码块只能访问静态成员
        StaticCount++;
    }

    //静态方法 
    public static void Fun1()
    {
        //Console.WriteLine(InstanceCount);//静态方法只能访问静态成员
    }

    public  void Fun2()
    {
        Console.WriteLine(InstanceCount);// 通过引用(对象 / 实例)调用实例方法,都会自动传递(对象 / 实例的)引用   
        //Console.WriteLine(this.InstanceCount);//所以可以访问 InstanceCount 实例成员
        Console.WriteLine(StaticCount );//但实例(对象)方法可以访问静态成员(类)
    }

    //静态类
    /*不能实例化,只能包含静态成员
     * 静态类不能被继承,但非静态类的方法,属性都可以被继承
     */


    /* 静态适用
    * 利:单独空间存储,所有对象共享,可直接被类名调用
    * 弊:静态方法中只能访问静态成员,共享数据被多个对象访问时会出现并发。
    * 适用场合:
    * 1.所有对象需要共享的数据。
    * 2.在没有对象是就要访问成员。
    * 3.工具类适合做静态类(常用,不需要过多数据)。
    * 如类 Math.方法
    *      unuty中有静态类Random
    *      Random.randuoRange(1,101); (randomRange()静态类Random的静态方法。
    *      简易与.Net中
    *      Random r = new Random();
    *      random.Next(1,101);(Next()实例(对象)方法。
    *      
    */
    //



}

}