C# 如何限制类的使用?

C# 如何限制类的使用?,c#,.net,oop,inheritance,C#,.net,Oop,Inheritance,我有一个列表。我如何限制只有Class1和Class2应该在列表中使用 Class1和Class2基本不同。我猜这两个类都有什么基本类,并限制列表只使用它,但我真的不知道。制作一个两个类都实现的接口 public interface MyInterface { } public class Class1 : MyInterface { } public class Class2 : MyInterface { } List<MyInterface> myList = new

我有一个
列表
。我如何限制只有
Class1
Class2
应该在列表中使用


Class1
Class2
基本不同。我猜这两个类都有什么基本类,并限制列表只使用它,但我真的不知道。

制作一个两个类都实现的接口

public interface MyInterface 
{
}

public class Class1 : MyInterface
{
}

public class Class2 : MyInterface
{
}

List<MyInterface> myList = new List<MyInterface>();
公共接口MyInterface
{
}
公共类Class1:MyInterface
{
}
公共类Class2:MyInterface
{
}
List myList=新列表();
列表中可以引用的类的唯一实例是那些实现
MyInterface
接口的类。在这种情况下,只有
Class1
Class2
我确信是处理此类要求的正确方法

但是,您可以尝试另一种方法:

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

} 

公共抽象类ClassAbstract
<代码>公共类Class1:ClassAbstract<代码>公共类Class2:ClassAbstract<代码>列表。您也可以对接口执行同样的操作。您正在寻找称为接口的概念。您如何使用列表中的项目?您是否使用
is
as
查看如何处理它们?这似乎有点奇怪。请注意,“Class1和Class2基本不同”,这可能表明交互接口方法不起作用@大卫,真的是。对于
Class1
Class2
没有相同的东西。我不同意,他们都有“需要进入列表”的共同点。这就是他们的共同属性。接口本身可以为空以反映这一点。如果它们如此不同以致于无法创建一个接口,那么将这两种类型列成一个列表也没有多大意义。我同意Bazzz的观点。查看@MehmetAtaş感谢您的支持和添加相关文章。