我怎样才能限制课程用量?

时间:2013-05-23 07:13:46

标签: c# .net oop inheritance

我有List<object>的列表。如何限制只有Class1Class2应该使用列表?

Class1Class2基本不同。我猜这个类的基本类是什么,限制List只能用它,但实际上不知道。

2 个答案:

答案 0 :(得分:8)

创建两个类都实现的接口

public interface MyInterface 
{
}

public class Class1 : MyInterface
{
}

public class Class2 : MyInterface
{
}

List<MyInterface> myList = new List<MyInterface>();

列表中可以引用的类的唯一实例是实现MyInterface接口的类。在这种情况下,只有Class1Class2

答案 1 :(得分:2)

我确信Bazz's answer 是处理此类要求的正确方法

然而,您可以尝试另一种方法:

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

}