美文网首页
44.C# base 与 virtual 关键字

44.C# base 与 virtual 关键字

作者: 技术老小子 | 来源:发表于2024-03-13 17:45 被阅读0次

摘要


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

相关文章

  • 成员虚函数和基类指针

    对于如下代码: 我们注意到Base类中的void who()函数添加了关键字virtual上述代码块运行结果如下:...

  • Item 07:为多态基类声明virtual析构函数

    Item 07: Declare destructions virtual in polymorphic base...

  • 虚拟继承和虚基类

    在c++中,虚拟继承(virtual inheritance)和虚基类(virtual base class)是多...

  • 继承

    单继承class base{public:virtual void fun() {}protected:int v...

  • C++虚继承和虚函数

    虚继承是指在类继承时,使用关键字virtual,如class B : virtual public A { ......

  • 2017.10.25C#

    今天老师讲了this和base关键字 this关键字引用类的当前类 静态成员方法中不能使用this关键字 base...

  • 虚表、虚函数

    什么是虚函数? 使用 virtual 关键字修饰的函数即为虚函数,virtual 关键字只能对类中的非静态函数使用...

  • C++ 坑点

    virtual 关键字 当一个方法声明包含virtual修饰符,这个方法就是虚方法。如果没有virtual修饰符,...

  • C++学习(6)多态

    1.虚函数和多态 在类的定义中,前面有virtual关键字的成员函数就是虚函数。 virtual关键字只用在类定义...

  • 虚函数和多态

    虚函数 在类的定义中,前面有virtual关键字的成员函数就是虚函数。virtual关键字只用在类定义里的函数声明...

网友评论

      本文标题:44.C# base 与 virtual 关键字

      本文链接:https://www.haomeiwen.com/subject/rplizdtx.html