我们在第1课中了解了类与实例的关系,即,当定义了某个类类型的对象时,这个对象就是此类的一个实例;那么,什么是实例成员呢?简单的说,如果定义类的成员(如字段、属性、方法等)时,没有使用static关键字,那么,这些成员就是实例成员,公共的(public)实例成员只能通过类的实例(对象)来访问,如car.DoorCount、car.Drive()等;如果使用代码CAuto.DoorCount引用DoorCount属性就会出现错误。

下面,继续在ConsoleTest项目中进行测试,选中“解决方案管理器”中的项目,如下图所示。

enter image description here

然后,通过菜单项“项目”>>“添加类”添加一个名为CAuto的类,如下图所示。

enter image description here

接下来,修改CAuto.cs文件的内容如下。

using System;

namespace ConsoleTest
{
    public class CAuto
    {
        private int myDoorCount;
        public int DoorCount
        {
            get { return myDoorCount; }
            set
            {
                if (value >= 0 && value <= 5)
                    myDoorCount = value;
                else
                    myDoorCount = 4;
            }
        }
        //
        public void Drive()
        {
            Console.WriteLine("行驶中...");
        }
        //
        public void Return()
        {
            Console.WriteLine("倒车中...");
        }
        //
    }
}

在CAuto类中,定义了三个公共的实例成员,分别是DoorCount属性、Drive()和Return()方法。下面的代码,我们在Program.cs文件中测试这个类的使用。

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CAuto car = new CAuto();
            car.DoorCount = 2;
            Console.WriteLine("车门数量是{0}",car.DoorCount);
            car.Drive();
            car.Return();
        }
    }
}

使用键盘Ctrl+F5快捷键,可以看到如下图所示的执行结果。

enter image description here

在类中定义类成员时使用static关键字,这个成员就是类的静态成员,静态成员可以通过类直接调用。我们新建一个名为CAutoFactory的类,修改其内容如下。

namespace ConsoleTest
{
    public class CAutoFactory
    {
        public static int Counter { get; private set; }
        //
        public static CAuto Create(int doorCount)
        {
            Counter = Counter + 1;
            CAuto auto = new CAuto();
            auto.DoorCount = doorCount;
            return auto;
        }
        //
    }
}

在CAutoFactory类中,定义了一个Counter静态属性,用于记录汽车对象的创建个数;一个Create()静态方法,用于创建汽车对象,请注意,此方法使用了一个参数,用于指定车门数量。下面的代码,继续在Program.cs文件中修改代码来测试CAutoFactory类。

using System;

namespace ConsoleTest
{
    class Program
    {
        static void Main(string[] args)
        {
            CAuto car1 = CAutoFactory.Create(2);
            CAuto car2 = CAutoFactory.Create(4);
            Console.WriteLine("创建汽车对象{0}个", CAutoFactory.Counter);
        }
    }
}

代码执行结果如下图所示。

enter image description here

思考:为什么在实例成员中可以调用静态成员,而在静态成员中不能调用实例成员。

本课的最后,了解一种简化代码书写的方式。下面两段代码的功能是相同的,都是用于创建CAuto对象并设置DoorCount属性,大家可以观察、对比两种方式的特点,并根据习惯和实际情况选择使用。

public static CAuto Create(int doorCount)
{
    CAuto auto = new CAuto();
    auto.DoorCount = doorCount;
    return auto;
}

public static CAuto Create(int doorCount)
{
    return new CAuto()
    {
        DoorCount = doorCount
    };
}

CHY软件小屋原创作品!