如何将基参数从重载的构造函数传递到派生类[重复]

Posted

技术标签:

【中文标题】如何将基参数从重载的构造函数传递到派生类[重复]【英文标题】:How to pass base parameters from an overloaded constructor into the derived class [duplicate] 【发布时间】:2015-07-31 12:34:06 【问题描述】:

主要

static void Main(string[] args)
    
        string name = "Me";
        int height = 130;
        double weight = 65.5;
        BMI patient1 = new BMI();
        BMI patient2 = new BMI(name,height,weight);

        Console.WriteLine(patient2.Get_height.ToString() + Environment.NewLine + patient1.Get_height.ToString() );
        Console.ReadLine();
    

基类

class BMI
 
    //memberVariables
    private string newName;
    private int newHeight;
    private double newWeight;

    //default constructor
    public BMI()

    //overloaded constructor
    public BMI(string name, int height, double weight)
    
        newName = name;
        newHeight = height;
        newWeight = weight;
    

    //poperties
    public string Get_Name
    
        get  return newName; 
        set  newName = value;
    

    public int Get_height 
    
        get  return newHeight; 
        set  newHeight = value;  
    

    public double Get_weight 
    
        get  return newWeight; 
        set  newWeight = value; 
    

派生类

class Health : BMI

    private int newSize;
    public Health(int Size):base()
    
        newSize = Size;
    

如何将基类参数从 BMI 基类中的重载构造函数传递到派生类? 每当我尝试将它们传递给基本参数时,我都会收到无效的表达式错误。 或者我只需要将它们传递给主要的 Health 对象吗? 例如

class Health : BMI

    private int newSize;

     public Health(int Size, string Name, int Height, double Weight)
    
        newSize = Size;
        base.Get_Name = Name
        base.Get_weight = Weight;
        base.Get_height = Height;
    

【问题讨论】:

我建议将您的属性重命名为 HeightNameWeight。以Get 为前缀使它们看起来像是在调用方法或访问只读属性。 【参考方案1】:

为什么不能像传参一样调用基类构造函数

public Health(int Size, string Name, int Height, double Weight)  
    : base(Name, Height, Weight)

    newSize = Size;

【讨论】:

【参考方案2】:

像这样:

class Health : BMI

    private int newSize;

    public Health(int Size, string Name, int Height, double Weight)
        : base(Name, Height, Weight)
    
        newSize = Size;
    

【讨论】:

【参考方案3】:

构造函数不是继承的,所以是的,您需要为基类创建一个新的构造函数,但是您可以使用适当的参数调用基构造函数:

 public Health(int size, string name, int height, double weight)
    : base(name, height, weight)

    newSize = size;

【讨论】:

基础构造函数的大小写不正确。 @d347hm4n 谢谢,已修复。

以上是关于如何将基参数从重载的构造函数传递到派生类[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将基类传递给函数而不是派生一个

虚函数总结

《面向对象程序设计》高手进~~~~~~~~~~~~!!

为啥当我有两个函数时编译器没有显示错误,一个将基类作为参数,一个将派生类作为参数?

无法从派生类构造函数参数访问受保护的基类成员[重复]

派生类的构造函数与析构函数的调用顺序