如何限制类的使用
本文关键字:何限制 | 更新日期: 2023-09-27 18:15:01
我有一个List<object>
的列表。在列表中,我如何限制只能使用Class1
和Class2
?
Class1
和Class2
基本不同。我猜这两个类都有一个基本类,限制列表只与它一起工作,但真的不知道。
创建一个两个类都实现的接口
public interface MyInterface
{
}
public class Class1 : MyInterface
{
}
public class Class2 : MyInterface
{
}
List<MyInterface> myList = new List<MyInterface>();
可以在列表中引用的类的唯一实例是那些实现MyInterface
接口的实例。本例中只有Class1
和Class2
。
我相信Bazz的答案是处理这种需求的正确方法。
然而,还有另一种方法,你可以尝试:
public class MyCustomList : ArrayList
{
public override void Add(object item){
if(item is Class1 || item is Class2) {
base.Add(item);
}
else {
throw BadaboomException();
}
}
}
或者您可以通过完全包装集合来确保签名
public class MyCustomList : ICollection
{
private readonly ArrayList m_InnerList = new ArrayList();
public virtual void Add(Class1 item) {
this.m_InnerList.Add(item);
}
public virtual void Add(Class2 item) {
this.m_InnerList.Add(item);
}
public void CopyTo(Array array, int index) {
m_InnerList.CopyTo(array, index);
}
public int Count { get { return m_InnerList.Count; } }
public bool IsSynchronized { get{ return m_InnerList.IsSynchronized; } }
public object SyncRoot { get{ return m_InnerList.SyncRoot; } }
public IEnumerator GetEnumerator(){
return m_InnerList.GetEnumerator();
}
}