龙空技术网

37.C# base 与 virtual 关键字

技术老小子 391

前言:

当前朋友们对“关键字virtual”大体比较珍视,同学们都需要知道一些“关键字virtual”的相关内容。那么小编同时在网摘上网罗了一些关于“关键字virtual””的相关内容,希望朋友们能喜欢,小伙伴们快快来学习一下吧!

摘要

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();

标签: #关键字virtual