c#字段

C#中字段可分为实例字段静态字段

1、实例字段

类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员。改变一个实例字段的值不会影响任何其它实例中成员的值。

如下例所示,代码声明了一个类D,它带有唯一整型字段Mem1。Main创建了该类的两个实例,每个实例都有自己的字段Mem1的副本,改变一个实例字段副本的值不影响其他实例的副本的值。

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

namespace test6
{
    class Program
    {
        static void Main(string[] args)
        {
            D d1 = new D();
            D d2 = new D();
            d1.Mem1 = 10;
            d2.Mem1 = 28;

            Console.WriteLine("d1 = {0}, d2 = {1}", d1.Mem1, d2.Mem1);
            Console.ReadLine();
        }
    }

    class D
    {
        public int Mem1;
    }
}

这段代码的输出为:

2、静态字段

除了实例字段,类还可以拥有静态字段。

静态字段被类的所有实例共享,所有实例都访问同一内存位置。因此,如果该内存位置的值被一个实例改变了,这种改变对所有的实例都可见。可以使用static修饰符将字段声明为静态。

就像实例成员,静态成员可以使用点运算符从类的外部访问,但因为没有实例,所以必须使用类名才能访问,如下代码所示:

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

namespace test6
{
    class Program
    {
        static void Main(string[] args)
        {
            D d1 = new D();
            D d2 = new D();

            d1.SetVars(2, 4);
            d1.Display("d1");

            d2.SetVars(15, 17);
            d2.Display("d2");

            d1.Display("d1");

            Console.WriteLine("Mem2 = " + D.Mem2.ToString());

            Console.ReadLine();
        }
    }

    class D
    {
        public int Mem1;
        static public int Mem2;

        public void SetVars(int v1, int v2)
        {
            Mem1 = v1;
            Mem2 = v2;
        }

        public void Display(string str)
        {
            Console.WriteLine("{0}: Mem1 = {1}, Mem2 = {2}", str, Mem1, Mem2);
        }
    }
}

这段代码的输出为:

对于实例成员,只有在实例创建之后才能产生实例成员,在实例销毁之后实例成员也就不存在了。但是即使类没有实例,也存在静态成员,并且可以访问

猜你喜欢

转载自www.cnblogs.com/lgj1994/p/10171232.html