我的情况类似如下。
public abstract class Mammal{ public Mammal( name, legs ){ ... } }
public class Dog{ public Dog( name, legs ) : base ( name, legs ) { ... } }
我不想总是Dog dog = new Dog( "fido", 4 );
我只想在Dog构造函数中使用“legs = 4”并仅传入名称。
但是,每当我试图将“腿”留在构造函数之外时,它会告诉我某些字段由于保护级别而无法访问。
我正在使用getter和setter,他们都是公开的。
编辑:这是最初的破类之一 -
public Soil(int idNo, string soilName, string prefabName)
: base(idNo, soilName, price, weight, size, madeOf, prefabName, iconName){
Price = 0;
Capacity = 1;
CanHoldSizes = new ContainerSizes[] {ContainerSizes.seed};
Contents = new Item[Capacity];
}
我不想将所有8个参数放入新的Soil()中,而是只想将每个新的Soil()放入4中,并让构造函数将其余部分设置为默认值。
这会产生错误,例如:“`Item.price'由于其保护级别而无法访问”
答案 0 :(得分:4)
你可以这样做
public class Dog
{
public Dog(string name) : base ( name, 4) { }
//OR this
public Dog(string name, int legs = 4) : base ( name, legs) { }
}
第一个构造者将始终创建一个有4条腿的哺乳动物。
第二个允许您执行此操作new Dog("MyDog")
,但编译器将用new Dog("MyDog",4)
替换此代码。
当然,使用第二个,你仍然可以做到这一点new Dog("MyDog",3)
,它会创造一条有三条腿的狗。
答案 1 :(得分:3)
我一定错过了什么。这不简单吗?
public class Dog
{
public Dog(string name) : base (name, 4)
{
}
}