Jag*_*ddy 4 oop c#-8.0 default-interface-member
在 C# 8.0 中,我们有一个新功能,可以在接口中提供默认方法实现,该方法也可以被其实现类覆盖。
我们曾经使用带有实例方法的抽象类来为其所有实现类提供通用功能。
现在我可以将那些具有实例方法的抽象类替换为具有 C# 8.0 中的默认方法实现的接口吗?
不,抽象类仍然有一席之地。特别是,抽象类可以声明字段(现在通常通过自动实现的属性),而接口仍然不能。他们还可以定义构造函数,并在其中执行验证。
下面是一个无法使用界面执行的操作的示例:
public abstract class NamedObject
{
    public string Name { get; }
    protected NamedObject(string name) =>
        Name = name ?? throw new ArgumentNullException(nameof(name));
    // Abstract methods here
}
显然,它不会真正被称为NamedObject- 会有一个特定于业务的原因使其抽象,这将决定名称。但这里的行为是不能放在接口中的行为。