【发布时间】:2019-12-23 09:01:51
【问题描述】:
我一直在理解 - 如何访问和使用(或者甚至可以使用)基类虚拟方法。
所以代码是: 基类:
public abstract class Vehicle
{
public string VehicleIdentificationNumber { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public abstract string DisplayName { get; }
public virtual bool HasAnAmazingColor(){
}
}
存储库模式:
public class VehicleRepository : IVehicleRepository, ICollection
{
private readonly List<Vehicle> _vehicles;
public int Count => _vehicles.Count;
public object SyncRoot => ((ICollection)_vehicles).SyncRoot;
public bool IsSynchronized => ((ICollection)_vehicles).IsSynchronized;
public void CopyTo(Array array, int index)
{
((ICollection)_vehicles).CopyTo(array, index);
}
public IEnumerator GetEnumerator()
{
return ((ICollection)_vehicles).GetEnumerator();
}
public VehicleRepository(List<Vehicle> aVehicles)
{
_vehicles = aVehicles;
}
然后 int unittest 我尝试获取虚拟方法,但知道我不了解某些内容,但无法弄清楚是什么,如何在不覆盖它的情况下使用该方法?
[TestClass()]
public class VehicleRepositoryTests
{
private VehicleRepository vehicleList = new VehicleRepository(new List<Vehicle>());
[TestMethod()]
public void HasAmazingColor()
{
//arrange
//act
vehicleList.??? -- I'm missing something
//assert
}
我可以在任何实现 Vehicle 的派生类中访问虚方法,但是有没有办法在存储库模式中使用它?
【问题讨论】:
-
你试图访问什么方法?
VehicleRepository不是从Vehicle派生的,因此您不会尝试访问其中一种方法。我看不到您实施的任何方式可以直接访问存储库中包含的Vehicle对象(除了将它们复制出来)。 -
我正在尝试访问公共虚拟 bool HasAnAmazingColor()。
-
所以你需要一个派生自
Vehicle的实例来访问它的一个虚拟方法,对吧?尽可能清楚地说明这一点:VehicleRepository不是从Vehicle派生的,因此它没有Vehicle的基类的任何方法,因为它不是Vehicle。 -
您是否打算做类似
vehicleList.FirstOrDefault().HasAnAmazingColor之类的事情,因为您正试图让您的回购看起来像一个集合?请注意,您仍然需要将其设为类型安全的集合 -
哦,等一下,当您不处理数据库时,为什么将其称为“存储库模式”?为什么不把你的代码改成
public class VehicleRepository : List<Vehicle> { ... }
标签: c# oop inheritance virtual-functions