나는 List<object>
의 목록을 가지고 있습니다. 어떻게하면 Class1
과 Class2
만을 사용해야한다는 것을 제한 할 수 있습니까?클래스 사용을 어떻게 제한 할 수 있습니까?
Class1
및 Class2
은 기본적으로 다릅니다. 나는이 클래스들 모두를위한 기본 클래스가 무엇인지를 추측 할 것이고리스트는 그것과 함께 작동하도록 제한 할 것이지만 실제로는 모른다.
나는 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
입니다.
"Class1과 Class2는 기본적으로 다릅니다"라는 점에 유의하십시오. 이는 상호 인터페이스 방식이 작동하지 않음을 나타낼 수 있습니다. :) – David
@David 정말입니다. 'Class1'과'Class2'에는 같은 것이 없습니다. – kseen
나는 둘 다 "목록에 들어가야한다"는 견해를 공유하지 않는다. 그래서 이것이 공통 속성입니다. 이를 반영하기 위해 인터페이스 자체가 비어있을 수 있습니다. 그것들이 너무 다르다면 인터페이스를 만드는 것이 의문의 여지가 없다면, 두 가지 유형 중 하나의 목록을 만드는 것이별로 의미가 없다. – Bazzz
나는 이러한 요구 사항을 처리하기 위해이 올바른 방법이라고 확신합니다. 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();
}
}
BadaboomComment – Bazzz
'공공 추상 클래스 ClassAbstract' 포장하여 서명을 확인 할 수 있습니다
이 당신이 시도 할 수있는 또 다른 방법, 그러나입니다. 'public class Class1 : ClassAbstract'입니다. 'public class Class2 : ClassAbstract'입니다. 'List'. 인터페이스에서도 동일한 작업을 수행 할 수 있습니다. –
Fendy
당신은 인터페이스라는 개념을 찾고 있습니다. http://msdn.microsoft.com/en-us/library/87d83y5b%28v=vs.80%29.aspx – Kta
목록의 항목을 어떻게 사용하고 있습니까? 당신은 그들과 무엇을해야하는지보기 위해'is' 또는'as'을 사용하고 있습니까? 그것은 조금 이상하게 보입니다. –