摘要
base
关键字用于从派生类中访问基类的成员:
- 调用基类上已被其他方法重写的方法。
- 指定创建派生类实例时应调用的基类构造函数。
仅允许基类访问在构造函数、实例方法或实例属性访问器中进行。
正文
创建派生类实例时调用的基类构造函数。
修改一下Material类,我们创建了两个构造,一个是无参数的,一个是初使化三个属性的。
public class Material
{
public string Name { get; set; }
public string Description { get; set; }
//修改为保护,这时项目直接调用会出错了
protected int Qty { get; set; }
public void InStock(int qty)
{
this.Qty += qty;
}
public void OutStock(int qty)
{
this.Qty -= qty;
}
public Material()
{
Console.WriteLine("Material 无参数构造!");
}
public Material(string name, string description, int qty)
{
Name = name;
Description = description;
Qty = qty;
Console.WriteLine("Material 三个参数构造!");
}
}
我们修改一下Equipment类
这里我们用到了base关键字
/// <summary>
/// 继承Material
/// </summary>
public class Equipment : Material
{
public Equipment() : base()
{
Console.WriteLine("Equipment 无参数构造!");
}
public Equipment(string brand)
{
Brand = brand;
Console.WriteLine("Equipment 一个参数构造!");
}
public Equipment(string name, string description, int qty) : base(name,description,qty)
{
Console.WriteLine("Equipment 三个参数构造!");
}
//一个自己独有的品牌属性
public string Brand { get; set; }
public void Print()
{
Console.WriteLine($"名称{this.Name},描述{this.Description},数量{this.Qty},品牌{this.Brand}");
}
}
调用
Equipment equipment1 = new Equipment();
Equipment equipment2 = new Equipment("SIEMENS");
Equipment equipment3 = new Equipment("A01","Testt",10);
基类 Material 和派生类 Tool 都有为 InStock,与OutStock 的方法。 通过使用 base 关键字,可以从派生类中调用基类的 InStock,与OutStock 方法。
创建Tool类
public class Tool:Material
{
public override void InStock(int qty)
{
base.InStock(qty);
this.Qty += qty*2;
}
public override void OutStock(int qty)
{
this.Qty -= qty * 2;
}
}
修改Material类,增加virtual 修饰符
public virtual void InStock(int qty)
{
this.Qty += qty;
}
public virtual void OutStock(int qty)
{
this.Qty -= qty;
}
public void PrintQty()
{
Console.WriteLine(this.Qty);
}
调用
Tool tool = new Tool();
tool.InStock(100);
tool.PrintQty();
网友评论