使用存储库模式从抽象类访问虚拟方法

问题描述 投票:-1回答:1

我一直坚持了解-如何访问和使用(甚至有可能使用)基类虚拟方法。

所以代码是:基类:

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单元测试,我尝试获取虚拟方法,但确实知道我不了解某些内容,但是无法弄清楚是什么,如何在不重写该方法的情况下使用该方法?

  [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的任何派生类中访问虚拟方法,但是有没有办法在存储库模式中使用它?

c# oop inheritance virtual-functions
1个回答
0
投票

嗯,您有抽象的基础调用Vehicle

您尚未从VehicleRepository派生您的Vehicle类。

因此,您将无法从Vehicle实例上的VehicleRepository访问虚拟方法。

也许您可以将“车辆列表”公开为属性,然后在单元测试中使用它,以防万一您想使用它。

© www.soinside.com 2019 - 2024. All rights reserved.