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ş感谢您的支持和添加相关文章。