在C#8.0中,我们有一个新功能,可以在Interfaces中提供默认的方法实现,该实现也可以被其实现类覆盖。
我们曾经拥有带有实例方法的Abstract类,以为其所有实现类提供通用功能。
现在,我可以将具有实例方法的那些Abstract类替换为具有从C#8.0起病房的Default方法实现的接口吗?
不,抽象类仍然有自己的位置。特别是,抽象类可以声明字段(这些天通常通过自动实现的属性),而接口仍然不能声明。他们还可以定义构造函数,并在其中执行验证。
这是您无法使用界面执行的示例:
public abstract class NamedObject
{
public string Name { get; }
protected NamedObject(string name) =>
Name = name ?? throw new ArgumentNullException(nameof(name));
// Abstract methods here
}
显然,它并不会真正被调用NamedObject
-有一个特定于业务的原因使其抽象,这将决定名称。但是这里的行为是不能放在接口中的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句