我有一个包含内部可观察集合的类。我想通过函数将其中的数据传递给类的用户。
我不希望他们能够更改可观察集合中的对象或集合本身。
从性能和易用性方面来看,最好的方法是什么?
我有一个包含内部可观察集合的类。我想通过函数将其中的数据传递给类的用户。
我不希望他们能够更改可观察集合中的对象或集合本身。
从性能和易用性方面来看,最好的方法是什么?
可能会使用这个:ReadOnlyObservableCollection<T>
。请注意,您将需要为对象编写自己的只读包装器,因为 ReadOnlyObservableCollection<T>
仅防止对集合本身进行更新。
我不喜欢使用ReadOnlyObservableCollection<T>
,因为它看起来像是一个错误或损坏的类;相反,我更喜欢基于契约的方法。
这是我使用的允许协变的方法:
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>(),
};
}
}