如何限制类的使用

本文关键字:何限制 | 更新日期: 2023-09-27 18:15:01

我有一个List<object>的列表。在列表中,我如何限制只能使用Class1Class2 ?

Class1Class2基本不同。我猜这两个类都有一个基本类,限制列表只与它一起工作,但真的不知道。

如何限制类的使用

创建一个两个类都实现的接口

public interface MyInterface 
{
}
public class Class1 : MyInterface
{
}
public class Class2 : MyInterface
{
}
List<MyInterface> myList = new List<MyInterface>();

可以在列表中引用的类的唯一实例是那些实现MyInterface接口的实例。本例中只有Class1Class2

我相信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();
    }
}