Nie lubię używać numeru ReadOnlyObservableCollection<T>
, ponieważ wygląda na pomyłkę/zepsutą klasę; Zamiast tego wolę podejście oparte na umowach.
Oto co używam, która pozwala na covarience:
public interface INotifyCollection<T> : ICollection<T>, INotifyCollectionChanged
{
}
public interface IReadOnlyNotifyCollection<out T> : IReadOnlyCollection<T>, INotifyCollectionChanged
{
}
public class NotifyCollection<T> : ObservableCollection<T>, INotifyCollection<T>, IReadOnlyNotifyCollection<T>
{
}
public class Program
{
private static void Main(string[] args)
{
var full = new NotifyCollection<string>();
var readOnlyAccess = (IReadOnlyCollection<string>) full;
var readOnlyNotifyOfChange1 = (IReadOnlyNotifyCollection<string>) full;
//Covarience
var readOnlyListWithChanges = new List<IReadOnlyNotifyCollection<object>>()
{
new NotifyCollection<object>(),
new NotifyCollection<string>(),
};
}
}
Witamy Stackoverflow i gratulacje na swojej pierwszej odpowiedzi. Spróbuj go zrozumieć - np. przez formatowanie (kod, oddzielne akapity lub style listy). Może przykład pomoże? – Mateng