c#中构造函数重载和链接的区别

棕榈

这是我的第 1 周 OOP,所以我退出新手,如果问题是关于基础的,我很抱歉,因为我无法理解它。我不明白构造函数重载和链接之间的区别。我正在使用以下父类:

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

namespace Vehicle_Application
{
abstract class Vehicle
{
    private string color;
    public string Color { get { return color; } set { color = value; }}

    private double fuelTankSize;
    public double FuelTankSize { get {return fuelTankSize;} set { fuelTankSize = value;}}

    private double efficiency; 
    public double Efficiency { get { return efficiency; } set { efficiency = value; } }
    private double fullTankMileage = 100; 
    public double milesPerGalon;
    public void calculateMPG() 
{this.milesPerGalon = (fullTankMileage/(fuelTankSize/4))* efficiency;}

}
}

从中驱动以下子类“汽车”:

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

namespace Vehicle_Application
{
class Car : Vehicle                            
{                                              
    public Car(string color = null)          
    {       this.Color = color;  }            
    public int NumberOfTyres;
    public Car(string color, int noOfTyres, double fuelTankSize, double efficiency)
    {
        this.Color = color;
        this.NumberOfTyres = noOfTyres;
        this.FuelTankSize = fuelTankSize;
        this.Efficiency = efficiency;
        this.calculateMPG();
    }
}
}

该程序如下所示:

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

namespace Vehicle_Application
{
class Program
{
    static void Main(string[] args)
    {
        Car car1 = new Car("Red", 4, 5, 6);
        Car car2 = new Car("Red");

        car1.Color = "Red";
        car2.Color = "Green";

        System.Console.WriteLine("The color of the first vehicle is: ");
        Console.WriteLine(car1.Color);

        System.Console.WriteLine("The color of the second vehicle is: ");
        Console.WriteLine(car2.Color);

        Console.WriteLine(car1.milesPerGalon);
        Console.ReadLine();
    }
}
}

现在我的困惑来自 constructor Car实例

  1. public Car(string color = null)
  2. public Car(string color, int noOfTyres, double fuelTankSize, double efficiency)

两者都有不同的签名(nr. of parameters)并且都Program通过调用重载

  1. Console.WriteLine(car2.Color);
  2. Console.WriteLine(car1.milesPerGalon);.

程序识别出car1有四个参数,因此使用汽车的第二个实例。car2只有一个参数,因此Program使用汽车的第一个实例。

相同的汽车实例在我看来就像是链接的完美示例,因为我在 Internet 上找到了解释与链接相同过程的示例。

伦纳特

这里不涉及构造函数链,它们只是构造函数的两个不同重载。

构造函数链看起来像这样:

public Car(string color = null) : this(color, 4, 5, 6)        
{

}     


public Car(string color, int noOfTyres, double fuelTankSize, double efficiency)
{
    this.Color = color;
    this.NumberOfTyres = noOfTyres;
    this.FuelTankSize = fuelTankSize;
    this.Efficiency = efficiency;
    this.calculateMPG();
}

注意: this()第一个构造函数调用。您可以通过传递颜色和一些默认值来链接到另一个 ctor。

如果它有一个,你也可以链接到基类 ctor(来自 Vehicle):

public class Vehicle
{
    public Vehicle(Color color)
    {
        // whatever
    }
}

public class Car : Vehicle
{

    public Car(Color color) : base(color)
    {
        // whatever
    }
}

InBetween 在评论中的更正:

必须始终调用 Vehicle 的构造函数,如果不先构造 Vehicle 就不能创建 Car。如果没有显式调用其他基本构造函数,则会隐式调用默认构造函数(如果有的话)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

链接重载的构造函数

来自分类Dev

C ++复制构造函数和=运算符中的重载情况

来自分类Dev

复制构造函数和Assignemnt运算符重载在C ++中不起作用

来自分类Dev

在构造函数中调用重载构造函数

来自分类Dev

新的类型/类和朋友的C ++重载构造函数

来自分类Dev

C ++链表-构造函数和运算符重载

来自分类Dev

重载的构造函数c#

来自分类Dev

C ++重载异常的构造函数

来自分类Dev

在C#中编写多个构造函数重载的最佳方法

来自分类Dev

c ++中的动态多态和函数重载

来自分类Dev

C ++中的原型设计模式和复制构造函数有什么区别

来自分类Dev

构造函数和构造文字之间的区别

来自分类Dev

构造函数和构造文字之间的区别

来自分类Dev

继承和重载默认构造函数

来自分类Dev

构造函数重载和默认参数

来自分类Dev

C ++中的lambdas重载以及clang和gcc之间的区别

来自分类Dev

Java和C ++复制构造函数之间的区别

来自分类Dev

C ++:contructor()和构造函数(void)之间的区别

来自分类Dev

C ++:contructor()和构造函数(void)之间的区别

来自分类Dev

复制构造函数和移动语义之间的 C++ 区别

来自分类Dev

C ++中的构造函数和复制构造函数行为

来自分类Dev

在构造函数中创建数组与C ++中的声明之间的区别

来自分类Dev

javascript中的构造函数和构造函数之间有区别吗?

来自分类Dev

Java中的无参数构造函数和默认构造函数之间的区别

来自分类Dev

重载的赋值运算符函数和复制构造函数中的错误

来自分类Dev

从重载的构造函数中调用`this`

来自分类Dev

Scala:验证重载构造函数中的参数

来自分类Dev

重载构造函数中的代码重复

来自分类Dev

是否可以在PHP中重载构造函数

Related 相关文章

热门标签

归档