# System.Collections.ObjectModel

``` diff
 namespace System.Collections.ObjectModel {
+    public class ReadOnlySet<T> : ICollection, ICollection<T>, IEnumerable, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlySet<T>, ISet<T> {
+        public ReadOnlySet(ISet<T> @set);
+        public int Count { get; }
+        public static ReadOnlySet<T> Empty { get; }
+        protected ISet<T> Set { get; }
+        bool ICollection<T>.IsReadOnly { get; }
+        bool ICollection.IsSynchronized { get; }
+        object ICollection.SyncRoot { get; }
+        public bool Contains(T item);
+        public IEnumerator<T> GetEnumerator();
+        public bool IsProperSubsetOf(IEnumerable<T> other);
+        public bool IsProperSupersetOf(IEnumerable<T> other);
+        public bool IsSubsetOf(IEnumerable<T> other);
+        public bool IsSupersetOf(IEnumerable<T> other);
+        public bool Overlaps(IEnumerable<T> other);
+        public bool SetEquals(IEnumerable<T> other);
+        void ICollection<T>.Add(T item);
+        void ICollection<T>.Clear();
+        void ICollection<T>.CopyTo(T[] array, int arrayIndex);
+        bool ICollection<T>.Remove(T item);
+        bool ISet<T>.Add(T item);
+        void ISet<T>.ExceptWith(IEnumerable<T> other);
+        void ISet<T>.IntersectWith(IEnumerable<T> other);
+        void ISet<T>.SymmetricExceptWith(IEnumerable<T> other);
+        void ISet<T>.UnionWith(IEnumerable<T> other);
+        void ICollection.CopyTo(Array array, int index);
+        IEnumerator IEnumerable.GetEnumerator();
+    }
 }
```

