【问题标题】:Class not recognised as implementing interface类不被识别为实现接口
【发布时间】:2017-03-30 23:01:57
【问题描述】:

我有以下课程:

namespace Model {
    public abstract class TrackerBase : ITrackerComponent { }

    public class ClickTracker : TrackerBase, IClickRecorder { }

    public class ClicksLeftTracker : TrackerBase, IClickRecorder { }
}

namespace Model.Interfaces {
    public interface IClickRecorder
    {
        List<DateTime> Clicks { get; }
    }
    public interface ITrackerComponent : INotifyPropertyChanged 
    {
        int ID { get; set; }
        string Name { get; set; }
        ICommand OnOptionsClick { get; set; }
        // ... etc
    }
}

ClickTrackerClicksLeftTracker在实现上非常相似,都正确实现了IClickRecorder接口。

当我将ClickTracker 作为参数传递给TrackerOptionsPage(ITrackerComponent) 时,它被识别为实现IClickRecorder 并且IsVisible 设置为true。

但是,当我将 ClicksLeftTracker 作为参数传递时,它被设置为 false,就好像它没有实现 IClickRecorder

从开始到有问题的方法的完整流程是:

// GetAllTrackers() returns IEnumerable<ITrackerComponent>
var allTrackers = _dataSource.GetAllTrackers();
allTrackers.ToList().ForEach(AddItemToGrid);

private void AddItemToGrid(ITrackerComponent item) {
    item.OnOptionsClick = 
        new Command(async () => await Navigation?.PushAsync(new TrackerOptionsPage(item, _dataSource)));
    // ...
}

public TrackerOptionsPage(ITrackerComponent trackerToShow) {
    ClickDatasSettings.IsVisible = trackerToShow is IClickRecorder;
    // ...
}

这是怎么回事?

【问题讨论】:

  • 我认为您需要展示更多代码才能获得解决方案。
  • 提供可用于重现问题的minimal reproducible example。在当前形式下,问题无法重现,因为它在隔离单元测试中测试时按预期执行。
  • 虽然您添加了更多代码,但它并没有为问题的上下文添加更多内容。我开始认为这是一个 XY 问题。与实际发生的事情相比,预期的行为是什么。问题中仍然缺少拼图的部分。
  • @Nkosi 感谢您到目前为止的帮助,但我真的不知道如何添加更多作品。我被这个问题难住了,我不知道从哪里开始寻找,因此我为什么来堆栈溢出。根据您提供的测试,一切都应该正常工作,但事实并非如此。我还应该添加什么来提供更多上下文?

标签: c# inheritance xamarin interface


【解决方案1】:

我通过从我正在使用的 android 模拟器中手动卸载应用程序并再次从 Xamarin 工作室运行它来解决它。

似乎有一些旧程序集在清理/重建时没有正确更新,这可能与我在开发时使用两台不同的计算机有关,其中一台具有 Xamarin Studio (OSX),另一台具有 Visual Studio (Windows)。

Thes issue with assemblies not updating on rebuild which lead me to my conclusion was found here.

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    相关资源
    最近更新 更多