我最近遇到的一些代码有点困惑。这是一个片段。首先,抽象类定义,然后从它继承的类:继承自Abstract类的类需要具有相同签名的方法吗?
public abstract class BaseClass
{
protected static void MapEntityToModel(string paramOne, List<TypeDef> types)
{
// Some Logic Here
}
protected static void MapModelToEntity(ModelType model, ResultType result)
{
// Some Logic Here
}
}
public class BaseExtension : BaseClass
{
public static ViewModel MapModelToViewModel(Model m)
{
var result = new ViewModel();
// Some Logic Here
return result;
}
public static List<ViewModel> MapModelsToViewModels(List<TModel> models)
{
return models.Select(m => MapModelToViewModel(m)).ToList();
}
public static Model MapViewModelToModel(ViewModel v)
{
var result = new Model();
// Some Logic Here
return result;
}
}
所以我的理解和抽象类的使用一直是一个抽象类中的任何抽象方法必须在继承的类中重写。如果抽象类中的方法没有声明为抽象类,派生类可以在方法中创建自己的实例,并直接调用抽象类的非抽象方法。
但是在任何情况下,抽象类的方法都用在派生类中。但是,考虑到以前的代码片段,派生类没有直接映射的签名或用法。
那么在这个特定场景中抽象类的目的是什么?为什么它没有错误地编译?我显然错过了抽象类的一些概念及其适当的实现。
所示的方法也是静态的,所以不能被覆盖,因为它们存在于类型上,而不是实例。 –
@RobLevine谢谢,修正。 –
D斯坦利 - 你的第一个评论似乎与我说的一致,但你说不?也许你误解了我的评论,或者我错过了什么?“抽象类中的任何抽象方法都必须在继承的类中重写” – Mark