• 静态与非静态对程序效率的影响


        在.net里静态类型分成:静态类、静态成员

    静态类:一个类里面如果只包含静态成员和静态方法,则该类可以定义为静态类,给类加上static修饰符;

    静态成员:静态成员包括静态字段和静态属性,静态成员和类相关联,不依赖于对象而存在,只能由类访问,而不能由对象访问;
    静态成员属于类所有,无认创建多少实例对象,静态成员在内存中只有一份;实例成员属于类的实例所有,每创建一个实例对象,实例成员都会在内存中分配一块内存区域;所以静态成员一般用于存放共享的数据段,如数据库连接字符串等。

    例如:

    static class Card

    {

      //定义一个静态成员

      private static string cardId="2501732";

      //静态属性

      private static string CardId

    {

      get{return cardId;}

    }

      //静态方法

    public static void ShowCard()

    {

      Console.WriteLine(CardId);

    }

    //访问静态方法

    public static void Main()

    {

      Card.ShowCard();

    }

    }

    静态方法和非静态方法比较:

    一、静态类不可实例化,否则会抛出异常,非静态类调用前要实例化,静态成员或静态方法独立实例对象之外,其调用必须通类来实现,如上例中用 Card.ShowCard()来访问静态方法;

    二、实例方法比静态方法多传递一个隐含的指针参数,该指针指向该方法所从属的已被实例化的对象。因此在实例方法内可使用this关键字代表所从属的实例对象,而静态方法不可使用this,因为静态方法不针对任何实例对象;

    三、性能上,静态方法和实例方法差别不大。所有方法,不管是静态方法还是实例方法,都是在JIT加载类时分配内存,不同的是静态方法以类名引用,而实例方法以对象实例引用。创建实例时,不会再为类的方法分配内存,所有的实例对象共用一个类的方法代码。因此静态方法和实例方法的调用,在性能上的差别微乎其微。
    四、静态成员属于类所有,无论创建多少实例对象,静态成员在内存中只有一份,实例成员属于类所有,每创建一个实例对象,实例成员都会在内在中分配一块内在空间。

  • 相关阅读:
    LA3523 二分图和点双连通分量的综合性质及证明
    LA4127计算几何+离散化+点覆盖
    LA 4728凸包算法-旋转卡壳的直径
    UVA 11168凸包+距离公式
    UVA 10652凸包+面的旋转
    UVA10969计算几何+交叉圆形成的圆弧长
    LA3485二分+求解积分方程+辛普森算法计算积分
    LA5009三分法
    UVA10341幂函数零点的通解分析
    UVA11524构造系数数组+高斯消元解异或方程组
  • 原文地址:https://www.cnblogs.com/fredx/p/1622470.html
Copyright © 2020-2023  润新知