zoukankan      html  css  js  c++  java
  • 重载构造函数

    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的速度在奔跑 ");

            }

            public void Run(int speed)

            {

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

            }

            #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();

            }

        }

    }

  • 相关阅读:
    Web开发模式演变(转)
    面向切面编程--AOP(转)
    Python装饰器与面向切面编程(转)
    python 线程,GIL 和 ctypes(转)
    Python性能鸡汤(转)
    对Django框架架构和Request/Response处理流程的分析(转)
    django源码笔记-【2】(转)
    django源码笔记-【1】(转)
    PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)
    从零开始学习渗透Node.js应用程序
  • 原文地址:https://www.cnblogs.com/hao02171990/p/3267354.html
Copyright © 2011-2022 走看看