簡體   English   中英

使用存儲庫模式從抽象類訪問虛擬方法

[英]Accessing virtual method from abstract class using repository pattern

我一直在理解 - 如何訪問和使用(或者甚至可以使用)基類虛擬方法。

所以代碼是: 基類:

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 的派生類中訪問虛方法,但是有沒有辦法在存儲庫模式中使用它?

好吧,您有抽象的基本調用Vehicle

通過仔細觀察你的代碼,我發現你沒有從Vehicle派生出你的VehicleRepository類。

因此,您將無法從VehicleRepository實例上的Vehicle訪問虛擬方法。

您正在尋找的方法HasAmazingColor將適用於List<Vehicle> _vehicles;每個對象List<Vehicle> _vehicles;

也許您可以將車輛列表作為屬性公開,然后在單元測試中使用它,以防萬一您想使用它。

或者

如果您的設計不允許將_vehicles公開為公共集合,那么您可以在VehicleRepository類中有一個公共方法,該方法在適當的Vehicle對象或多個對象上內部調用HasAmazingColor方法。

解決方案將取決於您的應用程序設計。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM