1.构造函数

(1)概念:构造函数是一个特殊的方法,它通常在类的成员最前面,主要用于在创建实例时对对象进行初始化。

(2)构造函数的定义:

 ①构造函数名通常与类名相同;

 ②构造函数没有返回值;

 ③一般情况下,构造函数总是public类型的。

 注:我们在编写类时,有的时候我们忘记了在类中添加一个构造函数,是不是在该类中就没有构造函数了呢?答案是否定的。在C#中,每个类都有构造函数,即使我们没有声明它,编译器也会自动的为我们提供一个默认的无参构造函数,如在上一节中,类中就没有添加构造函数,我们还能对Animal类实例化,这就是编译器提供给我们的默认的无参构造所起的作用。我们还要注意的是,在构造函数中不要对类的示例作初始化以外的事情,不要尝试显式的调用构造函数,也就是不能直接调用。

(3)构造函数的使用:

 构造函数不能被直接调用,必须通过new关键字在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用。

接着上节“C#面向对象的程序设计”的内容,下面我们用代码来解释以上内容:

①定义无参构造函数

语法:

public 类名

{

}

代码:

public Animal

{

}

②定义有参构造函数

语法:

public 类名(参数列表)

{

//用参数列表中的变量给类的成员变量赋值

}

代码:

public Animal(string name,string color)

{

      this._name = name;

      this._color = color;

}

在如上的代码中,我们涉及到了this关键字,在此,我们来粗略的解释下this关键字。this 关键字代表的是当前对象,在类的内部,我们可以用this关键字访问对象的内部成员。如this._name中,我们用this关键字调用Animal对象的成员_name。

2.重载

 (1)概念:在以个类中,参数列表不一致的几个同名方法。

  注意:仅仅返回值不同不能构成方法的重载。下面举个例子来区分哪个为方法的重载:

 public int Result()

 {

         //方法体

 }

 与

 public string Result()

 {

         //方法体

 }

 不形成方法的重载;

 public int Result()

 {

         //方法体

 }

 与

 public int Result(string 参数名,int 参数名)

 {

        //方法体

 }

 形成方法的重载

 public int Result()

 {

          //方法体

 }

 与

 public string Result(string 参数名1,int 参数名2)

 {

          //方法体

 }

 形成方法的重载

(2)重载有构造函数的重载,也有方法的重载。构造函数的重载其实和方法的重载没什么太大的区别,无非访问修饰符为public ,没用返回值类型,在此就不在举例子解释了,等会我们将会在编写的控制台小程序中展现出来。

4.静态方法和实例方法的区别

  

 

静态方法

 

实例方法

 

static 关键字

 

不需要static关键字

 

类名调用

 

实例对象调用

 

可以访问静态成员

 

可以直接访问静态成员

 

不可以直接访问实例成员

 

可以直接访问实例成员

 

不能直接调用实例方法

 

可以直接调用实例方法和静态方法

 

调用前初始化

 

实例化对象时初始化

 

 

下面,我们编写个控制台小程序:

在类中的代码:

namespace AnimalDemo

{

    class Animal

    {

        #region 构造函数重载

        public Animal()

        {

        }

        public Animal(string name, string color)

        {

            this._name = name;

            this._color = color;

        }

        public Animal(string name, string color, int speed)

        {

            this._name = name;

            this._color = color;

            this._speed = speed;

        }

        #endregion

        #region 字段与属性

        //名称

        private string _name;

        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }

        //颜色

        private string _color;

        public string Color

        {

            get { return _color; }

            set { _color = value; }

        }

        //奔跑速度

        private int _speed;

        public int Speed

        {

            get { return _speed; }

            set { _speed = value; }

        }

        #endregion

        #region 方法重载

        public void Run()

        {

            Console.WriteLine("一只"+this._color+"的"+this._name+"正在以"+this._speed+"km/h的速度在奔跑\n");

        }

        public void Run(int speed)

        {

            Console.WriteLine("一只" + this._color + "的" + this._name + "正在以" + speed + "km/h的速度在奔跑\n");

        }

        #endregion

    }

}

在Main()方法中的代码:

namespace AnimalDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            //方法一

            Animal animal1 = new Animal();

            animal1.Name = "兔子";

            animal1.Color = "白色";

            animal1.Speed = 20;

            animal1.Run();

 

            //方法二

            Animal animal2 = new Animal("兔子","白色");

            animal2.Run(20);

 

            //方法三

            Animal animal3 = new Animal("兔子","白色",20);

            animal3.Run();

            Console.ReadLine();

        }

    }

}