Olg*_*lgo 1 c# constructor arguments c#-4.0
我的情况类似于以下。
public abstract class Mammal{ public Mammal( name, legs ){ ... } }
public class Dog{ public Dog( name, legs ) : base ( name, legs ) { ... } }
Run Code Online (Sandbox Code Playgroud)
我不想总是这样做, 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];
}
Run Code Online (Sandbox Code Playgroud)
不必将所有 8 个参数都放入 new Soil() 中,我只想将每个 new Soil() 不同的 4 个参数放入其中,并让构造函数将其余参数设置为默认值。
这会产生错误,例如:“`Item.price' 由于其保护级别而无法访问”
你可以这样做
public class Dog
{
public Dog(string name) : base ( name, 4) { }
//OR this
public Dog(string name, int legs = 4) : base ( name, legs) { }
}
Run Code Online (Sandbox Code Playgroud)
第一个构造函数将始终创建一个有 4 条腿的哺乳动物。
第二个将允许您执行此操作,new Dog("MyDog")但编译器会将这段代码替换为new Dog("MyDog",4).
当然,使用第二个,你仍然可以做到这一点new Dog("MyDog",3),它会创建一条有 3 条腿的狗。
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |