У меня интерфейс выглядит следующим образом:
public interface IPageViewModel<T> where T : class
{
string ViewName { get; set; }
T SelectedItem { get; set; }
List<T> ItemsList { get; set; }
}
Тогда у меня есть два класса:
internal class TestViewModel : IPageViewModel<INotifyPropertyChanged> //let's skip the fact that T is supposed to be a class while it somehow compiles and works with an interface...
internal class HardwareViewModel : IPageViewModel<Hardware>
Где Hardware
:
public class Hardware : NotificationObject
А NotificationObject
- это:
public class NotificationObject : INotifyPropertyChanged
И, наконец, у меня есть следующий класс:
internal class NavigationViewModel
{
public List<IPageViewModel<INotifyPropertyChanged>> PageViewModelsList { get; set; } = new List<IPageViewModel<INotifyPropertyChanged>>();
public NavigationViewModel()
{
PageViewModelsList.Add(new TestViewModel());
PageViewModelsList.Add(new HardwareViewModel()); //error
}
}
Теперь проблема в том, что в то время как первая строка в конструкторе компилируется нормально, вторая выдает ошибку: cannot convert from ViewModels.HardwareViewModel to Helpers.IPageViewModel<System.Component.INotifyPropertyChanged>
.
Но это не имеет смысла. Hardware
наследуется от NotificationObject
, который реализует INotifyPropertyChanged
, поэтому IPageViewModel<Hardware>
=== IPageViewModel<INotifyPropertyChanged>
. Может кто-нибудь объяснить, почему есть ошибка?