类未被识别为实现接口

时间:2017-03-30 23:01:57

标签: c# inheritance xamarin interface

我有以下课程:

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;
    // ...
}

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

我通过从我正在使用的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.