2011-04-15 5 views
1

현재 시스템에서 나는 ammendments에 대한 기능이 있어야합니다.다양한 유형의 컬렉션

사용자가 수정 패키지를 만들 수 있고 그 패키지에는 다양한 도메인 개체의 새 버전이 포함되어 있습니다 (구조 변경이 아니라 데이터 변경).

다양한 요소 유형에 적용 할 모든 수정 사항을 포함하는 "AmmendmentPackage"를 갖고 싶습니다.

는 지금까지 내가 AmmendmentPackage를하는 것에 대한 갈 다양한 유형의 다른 Ammentments의 수를 포함하려면 어떻게

public class AmmendmentPackage : BaseObject 
{ 
    public string Name {get;set;} 

    public string Description { get; set; } 

    public int MajorVersionNumber { get; set; } 

    public int MinorVersionNumber { get; set; } 

    public bool IsGazetted { get; set; } 

    public AmmendmentPackageState State { get; set; } 
} 

public class Ammendment<T> 
{ 
    public T AmmendedElement{get;set;} 

    public AmmendmentState State {get;set;} 

    public ConcurrencyDetails ConcurrencyState { get; set; } 
} 

있습니다. 나는 ICollection 사용에 대해 생각하고 있었지만 그 때 ICollection<Ammenndment<T>>을 가지게되었고 패키지에 한 종류의 수정 만 할 수있었습니다.

또한 사전을 사용하는 것을 고려했지만 100 % 확신하지는 못했지만 실제로는 그렇게 할 수있을 것입니다. 바라건대 정말 기본적인 것을 놓치지 않았지만 몇 가지 아이디어를 고맙게 생각합니다.

건배

+1

'yourCollection [4] .AmmendedElement.Something'이라고 쓰면 어떻게 될까요? 그것은 어떤 유형입니까? – SLaks

+0

모든 근속 연수는 공통 기본 클래스 또는 인터페이스를 가질 수 있습니까? 그렇지 않으면'List '과 많은 수작업 배관을 실제로 볼 수 있습니다. –

+0

수정안의 철자를 원할 수도 있습니다. – TrueWill

답변

2

이것은 불가능합니다.
다른 유형의 개체를 보유하는 강력한 형식의 컬렉션을 사용할 수 없습니다.

대신, 제네릭 이외의 기본 클래스 또는 인터페이스를 만들어 해당 컬렉션을 만들어야합니다.

0

동일한 인터페이스를 구현하는 다른 구체적인 유형의 모음을 만들 수 있습니다. 인터페이스 정의를 비워두면 해당 유형을 수정하지 않고도 모든 참조 유형에 적용 할 수 있습니다 (단, 런타임시 AmmendedElement에서 사용할 수있는 연산은 무엇인지 파악해야합니다. 권장하지 않습니다. 그냥 가능). 예 :

using System; 
using System.Collections.Generic; 

public interface IAnyType { } 
public abstract class PackageBase { } 
public class Class_1 : IAnyType { public string Class_1_String { get; set; } } 
public class Class_2 : IAnyType { public string Class_2_String { get; set; } } 

public class AmmendmentPackage : PackageBase 
{ 
    public IList<Ammendment<IAnyType>> Ammendments { get; set; } 
} 

public class Ammendment<T> where T : IAnyType 
{ 
    public T AmmendedElement { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Ammendment<IAnyType> ammendment_1 = new Ammendment<IAnyType>(); 
     ammendment_1.AmmendedElement = new Class_1(); 

     Ammendment<IAnyType> ammendment_2 = new Ammendment<IAnyType>(); 
     ammendment_2.AmmendedElement = new Class_2(); 

     AmmendmentPackage package = new AmmendmentPackage(); 
     package.Ammendments = new List<Ammendment<IAnyType>>(2); 
     package.Ammendments.Add(ammendment_1); 
     package.Ammendments.Add(ammendment_2); 
    } 
} 
관련 문제