1

我的情况类似于以下。

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 个参数都放入 new Soil() 中,我只想将 4 个放入其中,这对于每个 new Soil() 都会有所不同,并让构造函数将其余参数设置为默认值。

这会产生错误,例如:“`Item.price' 由于其保护级别而无法访问”

4

2 回答 2

5

你可以这样做

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),它会创建一条有 3 条腿的狗。

于 2013-11-05T02:47:33.447 回答
3

我肯定错过了什么。不是这么简单吗?

public class Dog
{
    public Dog(string name) : base (name, 4)
    {
    }
}
于 2013-11-05T02:46:32.323 回答