C# 如何在向父类构造函数传递参数的同时向子类构造函数添加更多代码?

C# 如何在向父类构造函数传递参数的同时向子类构造函数添加更多代码?,c#,inheritance,constructor,C#,Inheritance,Constructor,儿童班: using System; using System.Collections; namespace Game { public class Warrior:Inhabitant { public Warrior(string name,int age):base(name,age) { private bool mobility; private bool immortality;

儿童班:

using System;
using System.Collections;
namespace Game
{
    public class Warrior:Inhabitant
    {
        public Warrior(string name,int age):base(name,age)
        {
            private bool mobility;
            private bool immortality;
        }
    }
}
现在,父类:

public class Inhabitant {

     private string name;
     private int age;

    public Inhabitant(string name,int age){
        this.name = name;
        this.age = age;
    }

这段代码在Java中工作。我不明白为什么它在这里不起作用

您不能在构造函数内使用访问修饰符。尝试:

public Warrior(string name,int age):base(name,age)
{
   bool mobility;
   bool immortality;
}
上述内容在语法上是正确的,但在语义上没有任何作用,因为移动性和不朽性只存在于构造函数内部。也许你想要的是:

public class Warrior:Inhabitant
{
       private bool mobility;
       private bool immortality;
       public Warrior(string name,int age):base(name,age)
       {
            this.mobility=false; //example case
            this.immortality=true; //example case
       }
}

不能在构造函数内使用访问修饰符。尝试:

public Warrior(string name,int age):base(name,age)
{
   bool mobility;
   bool immortality;
}
上述内容在语法上是正确的,但在语义上没有任何作用,因为移动性和不朽性只存在于构造函数内部。也许你想要的是:

public class Warrior:Inhabitant
{
       private bool mobility;
       private bool immortality;
       public Warrior(string name,int age):base(name,age)
       {
            this.mobility=false; //example case
            this.immortality=true; //example case
       }
}

您需要声明私有字段并在构造函数中初始化它们

using System;
using System.Collections;
namespace Game
{
    public class Warrior:Inhabitant
    {
        // declare private fields
        private bool mobility;
        private bool immortality;

        public Warrior(string name,int age, bool mobility, bool immortality):base(name,age)
        {
            // initialize
            this.mobility=mobility;
            this.immortality=immortality;
        }
    }
}

您需要声明私有字段并在构造函数中初始化它们

using System;
using System.Collections;
namespace Game
{
    public class Warrior:Inhabitant
    {
        // declare private fields
        private bool mobility;
        private bool immortality;

        public Warrior(string name,int age, bool mobility, bool immortality):base(name,age)
        {
            // initialize
            this.mobility=mobility;
            this.immortality=immortality;
        }
    }
}
  • 在构造函数外部声明您的成员:

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        // ...
    }
    
    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        public Warrior(string name,int age, bool mobility, bool immortablity) : base(name,age) // base call as usual
        {
            // set properties
            this.mobility = mobility;
            this.immortability = immortability;
        }
    }
    
  • 将参数传递给新构造函数:

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        // ...
    }
    
    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        public Warrior(string name,int age, bool mobility, bool immortablity) : base(name,age) // base call as usual
        {
            // set properties
            this.mobility = mobility;
            this.immortability = immortability;
        }
    }
    
  • 在构造函数外部声明您的成员:

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        // ...
    }
    
    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        public Warrior(string name,int age, bool mobility, bool immortablity) : base(name,age) // base call as usual
        {
            // set properties
            this.mobility = mobility;
            this.immortability = immortability;
        }
    }
    
  • 将参数传递给新构造函数:

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        // ...
    }
    
    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
    
        public Warrior(string name,int age, bool mobility, bool immortablity) : base(name,age) // base call as usual
        {
            // set properties
            this.mobility = mobility;
            this.immortability = immortability;
        }
    }
    

  • 首先,您不能在类的构造函数或方法中声明任何私有变量

    更改战士类如下,它应该解决这个问题

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
        public Warrior(string name,int age):base(name,age)
        {
    
        }
    }
    
    如果它们是构造函数的局部变量,那么应该在不使用访问修饰符的情况下声明它们

    public class Warrior:Inhabitant
    {
        public Warrior(string name,int age):base(name,age)
        {
            bool mobility;
            bool immortality;
        }
    }
    

    首先,您不能在类的构造函数或方法中声明任何私有变量

    更改战士类如下,它应该解决这个问题

    public class Warrior:Inhabitant
    {
        private bool mobility;
        private bool immortality;
        public Warrior(string name,int age):base(name,age)
        {
    
        }
    }
    
    如果它们是构造函数的局部变量,那么应该在不使用访问修饰符的情况下声明它们

    public class Warrior:Inhabitant
    {
        public Warrior(string name,int age):base(name,age)
        {
            bool mobility;
            bool immortality;
        }
    }
    


    你犯了什么错误?如果要从派生类访问私有字段,可能需要对其进行保护。它不工作是什么意思?您必须定义“不工作”是什么意思。此代码应指定名称和年龄值。这会编译吗?您是否设置了断点或编写了单元测试来验证name和age变量是否符合预期?如果可以,请显示错误,我们可以提供更多帮助。您不能在方法或构造函数变量中使用访问修饰符。从
    移动性
    不朽
    中删除
    私有
    ,一切都会好起来。你在战士的构造函数中定义属性,这是不合法的。把那个搬出去。您可以在那里分配它们,也可以使用任何其他类型的代码。您遇到了什么错误?如果要从派生类访问私有字段,可能需要对其进行保护。它不工作是什么意思?您必须定义“不工作”是什么意思。此代码应指定名称和年龄值。这会编译吗?您是否设置了断点或编写了单元测试来验证name和age变量是否符合预期?如果可以,请显示错误,我们可以提供更多帮助。您不能在方法或构造函数变量中使用访问修饰符。从
    移动性
    不朽
    中删除
    私有
    ,一切都会好起来。你在战士的构造函数中定义属性,这是不合法的。把那个搬出去。您可以在那里分配它们,也可以使用任何其他类型的代码。请在您的答案中添加解释。虽然这段代码可以回答这个问题,但是提供关于它如何和/或为什么解决这个问题的额外上下文将提高答案的长期价值。非常感谢。这很有用。请在你的回答中添加一个解释。虽然这段代码可以回答这个问题,但是提供关于它如何和/或为什么解决这个问题的额外上下文将提高答案的长期价值。非常感谢。非常感谢你提供的有用信息非常感谢你提供的有用信息非常感谢非常感谢。我实际上犯了一个很大的错误。我的错!对不起,非常感谢。我实际上犯了一个很大的错误。我的错!很抱歉