zoukankan      html  css  js  c++  java
  • 成员修饰:静态和实例成员

    对类的内部数据成员和函数成员都可以用static修饰。

    如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
    在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
    静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
     1    public class Space
     2    {
     3
     4        public static void Main(string[] args)
     5        {
     6            System.Console.WriteLine(new Order().CreateNumber());//725-1
     7            System.Console.WriteLine(new Order().CreateNumber());//725-2
     8        }

     9
    10    }

    11
    12    
    13
    14
    15    public class Order
    16    {
    17
    18        private static int Count;// 该Count能被所有的实例访问
    19        public string Number;
    20
    21        public string CreateNumber()
    22        {
    23
    24            Count++;
    25            return System.DateTime.Now.ToString("yMd-"+ Count.ToString();
    26        
    27        }

    28    }
    上面的代码中,Count就是一个静态成员,可以被所有的实例访问,且数据共享。


    不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
     1    public class Space
     2    {
     3
     4        public static void Main(string[] args)
     5        {
     6            System.Console.WriteLine(Order.CreateNumber());//725-1
     7            System.Console.WriteLine(Order.CreateNumber());//725-2
     8        }

     9
    10    }

    11
    12    public class Order
    13    {
    14
    15        private static int Count;// 该Count能被所有的实例访问
    16        public string Number;
    17
    18        public static string CreateNumber()
    19        {
    20
    21            Count++;
    22            return System.DateTime.Now.ToString("yMd-"+ Count.ToString();
    23
    24        }

    25    }


    注意上面代码中第6、7行对于CreateNumber的调用。

    static方法的运用,很多在于语义领会。比如CreateNumber如果是实例方法的话,就会出现以下不合理的代码。

    1            Order order1 = new Order();
    2            Order ordre2 = new Order();
    3            ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
    4            System.Console.WriteLine(ordre2.Number);

    所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义

    1            Order order1 = new Order();
    2            Order ordre2 = new Order();
    3            ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
    4            System.Console.WriteLine(ordre2.Number);
  • 相关阅读:
    黑马程序员--C语言基础之--数组、指针的基础知识
    黑马程序员--C语言基础之--变量、内部函数与外部函数
    黑马程序员--C语言基础之--printf函数
    黑马程序员--C语言基础之--scanf函数
    黑马程序员--C语言基础之--数据类型
    鉴定一张图片是否处理过
    图解JQUERY尺寸及位置定义
    谈谈对“渐进增强与平稳退化“的理解
    理解 JavaScript 作用域和作用域链
    编写更好的jQuery代码的建议
  • 原文地址:https://www.cnblogs.com/shyleoking/p/640479.html
Copyright © 2011-2022 走看看