对类的内部数据成员和函数成员都可以用static修饰。
如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
      
  
  如果成员被static修饰,那该成员就是静态的,从应用角度讲,类的使用者通过类来访问静态成员在语义上更能够被理解,而通过实例来访问静态成员在语义上显得不合适。
在类的内部,所有成员都可以访问静态成员。但反过来,静态成员绝对不可以访问实例成员。
静态成员的值对于所有实例对象而言,是共享的,所以任何实例都可以访问或修改静态成员,且更改的结果也同样影响所有实例的访问。
 1 public class Space
    public class Space
2
 
     {
{
3
4 public static void Main(string[] args)
        public static void Main(string[] args)
5
 
         {
{
6 System.Console.WriteLine(new Order().CreateNumber());//725-1
            System.Console.WriteLine(new Order().CreateNumber());//725-1
7 System.Console.WriteLine(new Order().CreateNumber());//725-2
            System.Console.WriteLine(new Order().CreateNumber());//725-2
8 }
        }
9
10 }
    }
11
12 
    
13
14
15 public class Order
    public class Order
16
 
     {
{
17
18 private static int Count;// 该Count能被所有的实例访问
        private static int Count;// 该Count能被所有的实例访问
19 public string Number;
        public string Number;
20
21 public string CreateNumber()
        public string CreateNumber()
22
 
         {
{
23
24 Count++;
            Count++;
25 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
            return System.DateTime.Now.ToString("yMd-") + Count.ToString();
26 
        
27 }
        }
28 }
    }
上面的代码中,Count就是一个静态成员,可以被所有的实例访问,且数据共享。 public class Space
    public class Space2

 
     {
{3

4
 public static void Main(string[] args)
        public static void Main(string[] args)5

 
         {
{6
 System.Console.WriteLine(new Order().CreateNumber());//725-1
            System.Console.WriteLine(new Order().CreateNumber());//725-17
 System.Console.WriteLine(new Order().CreateNumber());//725-2
            System.Console.WriteLine(new Order().CreateNumber());//725-28
 }
        }9

10
 }
    }11

12
 
    13

14

15
 public class Order
    public class Order16

 
     {
{17

18
 private static int Count;// 该Count能被所有的实例访问
        private static int Count;// 该Count能被所有的实例访问19
 public string Number;
        public string Number;20

21
 public string CreateNumber()
        public string CreateNumber()22

 
         {
{23

24
 Count++;
            Count++;25
 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
            return System.DateTime.Now.ToString("yMd-") + Count.ToString();26
 
        27
 }
        }28
 }
    }不过,在上述代码中,CreateNumber的方法作为实例方法其实有点不妥,因此最好改为静态方法。
 1 public class Space
    public class Space
2
 
     {
{
3
4 public static void Main(string[] args)
        public static void Main(string[] args)
5
 
         {
{
6 System.Console.WriteLine(Order.CreateNumber());//725-1
            System.Console.WriteLine(Order.CreateNumber());//725-1
7 System.Console.WriteLine(Order.CreateNumber());//725-2
            System.Console.WriteLine(Order.CreateNumber());//725-2
8 }
        }
9
10 }
    }
11
12 public class Order
    public class Order
13
 
     {
{
14
15 private static int Count;// 该Count能被所有的实例访问
        private static int Count;// 该Count能被所有的实例访问
16 public string Number;
        public string Number;
17
18 public static string CreateNumber()
        public static string CreateNumber()
19
 
         {
{
20
21 Count++;
            Count++;
22 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
            return System.DateTime.Now.ToString("yMd-") + Count.ToString();
23
24 }
        }
25 }
    }
 public class Space
    public class Space2

 
     {
{3

4
 public static void Main(string[] args)
        public static void Main(string[] args)5

 
         {
{6
 System.Console.WriteLine(Order.CreateNumber());//725-1
            System.Console.WriteLine(Order.CreateNumber());//725-17
 System.Console.WriteLine(Order.CreateNumber());//725-2
            System.Console.WriteLine(Order.CreateNumber());//725-28
 }
        }9

10
 }
    }11

12
 public class Order
    public class Order13

 
     {
{14

15
 private static int Count;// 该Count能被所有的实例访问
        private static int Count;// 该Count能被所有的实例访问16
 public string Number;
        public string Number;17

18
 public static string CreateNumber()
        public static string CreateNumber()19

 
         {
{20

21
 Count++;
            Count++;22
 return System.DateTime.Now.ToString("yMd-") + Count.ToString();
            return System.DateTime.Now.ToString("yMd-") + Count.ToString();23

24
 }
        }25
 }
    }
注意上面代码中第6、7行对于CreateNumber的调用。
static方法的运用,很多在于语义领会。比如CreateNumber如果是实例方法的话,就会出现以下不合理的代码。
1 Order order1 = new Order();
            Order order1 = new Order();
2 Order ordre2 = new Order();
            Order ordre2 = new Order();
3 ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
            ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
4 System.Console.WriteLine(ordre2.Number);
            System.Console.WriteLine(ordre2.Number);
 Order order1 = new Order();
            Order order1 = new Order();2
 Order ordre2 = new Order();
            Order ordre2 = new Order();3
 ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧
            ordre2.Number = order1.CreateNumber();//虽然编译通过,但语义上也太离奇了吧4
 System.Console.WriteLine(ordre2.Number);
            System.Console.WriteLine(ordre2.Number);所以当CreateNumber是静态的时候,下面的代码更明确的告诉我们正常的语义
1 Order order1 = new Order();
            Order order1 = new Order();
2 Order ordre2 = new Order();
            Order ordre2 = new Order();
3 ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
            ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
4 System.Console.WriteLine(ordre2.Number);
            System.Console.WriteLine(ordre2.Number);
 Order order1 = new Order();
            Order order1 = new Order();2
 Order ordre2 = new Order();
            Order ordre2 = new Order();3
 ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配
            ordre2.Number = Order.CreateNumber();//Number由Ordr总控分配4
 System.Console.WriteLine(ordre2.Number);
            System.Console.WriteLine(ordre2.Number);来源:https://www.cnblogs.com/shyleoking/archive/2007/02/05/640479.html