【发布时间】: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
}
}
ClickTracker和ClicksLeftTracker在实现上非常相似,都正确实现了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