首页 > 解决方案 > C#中的重写方法

问题描述

在学习了整个学期的 Java 之后,我目前正在自学 C#。

java(或一般的面向对象编程)的特性之一是能够覆盖继承到子类中的方法。

当我在 C# 中研究此功能时,我试图自己覆盖一个方法,而没有研究在 C# 中覆盖方法的正确方法,它似乎有效。

virtual但是,经过进一步研究,我了解到在声明超类中的override方法和覆盖子类中的方法时,我们需要使用关键字。

所以我的问题是:
在 C# 中覆盖方法的正确方法是什么?

附加说明:我还想知道同样的情况是否适用于 C# 中的重载方法。

标签: c#.net.net-coremethodsoverriding

解决方案


根据您是否要提供默认实现,在 .net 中有两种不同的覆盖方式。

还有其他与继承相关的关键字,例如:

例子:

public abstract class Bank
{
    public abstract string Country { get; } // Everything inheriting must implement it
    public virtual decimal TaxPercent { get { return 0.25; } } // Implementing it is optional
    public decimal DeclareTaxes()
    {
        decimal taxesToPay = 4000 * TaxPercent;
        return taxesToPay;
    }
}

public sealed class BahamasBank: Bank
{
    public override string Country { get { return "Bahamas"; }
    public override TaxPercent { get { return 0.0; } } // Bahamas is different from most countries in tax related stuff
}

public sealed class CanadaBank: Bank
{
    public override string Country { get { return "Canada"; }
}

推荐阅读