2012-03-01 2 views
2

모두 저는 여러 SQL 데이터베이스를 정기적으로 연결하고 분리해야하는 응용 프로그램이 있습니다. 이 모든 데이터베이스를 반복 할 수있는 컬렉션으로 유지하는 클래스를 만들고 싶습니다. 내가 ICollection에서 상속하고 이렇게,하지만 난 이해하지 오전 일부 thinkg가하려면 : 당신은 '추가'등의 방법을 추가해야하는 경우에.NET ICollection 클래스 기본

class SqlDataBases : ICollection<SqlDb> 
{ 
    private List<SqlDb> dbColl; 

    public SqlDataBases() 
    { 
     dbColl = new List<SqlDb>(); 
    } 

    // Add an index to the collection. 
    public SqlDb this[int _nIndex] 
    { 
     get { return (SqlDb)dbColl[_nIndex]; } 
     set { dbColl[_nIndex] = value; } 
    } 

    // et al. 
} 

public class DbEnumerator : IEnumerator<SqlDb> 
{ 
    // ... 
} 

class SqlDb 
{ 
    private string strMdfFullPath; 
    private string strLdfFullPath; 
    private bool bIsAttached; 

    public SqlDb(string _strMdfFullPath, string _strLdfFullPath, bool _bIsAttached) 
    { 
     this.strMdfFullPath = _strMdfFullPath; 
     this.strLdfFullPath = _strLdfFullPath; 
     this.bIsAttached = _bIsAttached; 
    } 
} 

내 질문은 "왜 모든 ICollection에서 상속되는이 ' 당신 자신을 포함하고 있습니까? 아니면 MSDN에 나와있는 것처럼 직접해야합니까? "C# in a Nutshell"을 읽고 있는데이 질문은이 위대한 책에서 다루어지지 않은 것입니다.

사과하겠습니다. 나는 여기서 뭔가를 놓치고 있다는 것을 안다. ...

+0

제 생각은 같습니다. 왜 필요하면'List '을 사용하지 않으시겠습니까? 그것은 내가 볼 수있는 한 구현하려고하는 기능을 가지고 있습니다. –

+1

@Killercam, 아래의 한 가지 주석은 사전 <> 사용을 제안합니다.데이터베이스 이름과 같은 키를 지정할 수 있기 때문에 Dictionary <>가 더 좋을 것입니다. –

+0

도움 주셔서 감사합니다. – MoonKnight

답변

3

제 질문은 "왜 ICollection에서 상속 받았 는가? ''추가 ','포함 '등과 같은 메서드를 추가해야 할 때입니까?

ICollection<T>인터페이스 - 그것은 당신이 구현해야하는 멤버를 지정합니다. 이미 이있는 항목에서 파생하려면 Collection<T>을 확인하십시오. 고유 한 특수 특성을 사용하여 자체 컬렉션 데이터 구조를 만들려는 경우 인터페이스를 직접 구현해야합니다. 그렇게하고 싶지는 않습니다.

솔직히 왜 여기에 자신 만의 클래스가 필요한지 명확하지 않습니다. List<SqlDb>을 클라이언트 코드에서 직접 사용하지 않는 이유는 무엇입니까?

+0

감사합니다 존, 내 어리 석음을 정리했습니다. 그리고 당신 말이 맞아요, 여기에'List '만 필요합니다. -하지만 전에는 제 컬렉션 클래스를 만들지 않았고 그것을하기를 좋아했지만 어리석은 일입니다. 시간 내 줘서 고마워. – MoonKnight

2

인터페이스는 스켈레톤입니다. 그들은, 그들이

Interfaces

3

가 직접 List<SqlDb>를 사용하는 방법에 대해 생각 해본 적이 등 모든 메소드, 프로퍼티의 서명을 포함하는 모든 논리를 포함하지 않는거야?

SqlDataBases 클래스에서 얻으려는 것이 확실하지 않습니다.

List<SqlDb>을 직접 사용할 수 없다면, ICollection<SqlDb> 대신 List<SqlDb>에서 상속하는 것에 대해 생각해보십시오. "당신은 '추가'등의 방법을 추가해야하는 경우 이유를 전혀은 ICollection에서 상속"응답

+1

나는 그것을 사전에 넣었지만 이것에 대한 이유는 아직 알려지지 않았다. – b0rg

1

: 당신이 필요하지 않은 경우

당신은 ICollection을 상속 할 필요가 없습니다 추가/갖고 싶어/다음 등

2

ICollection <에서 상속하는 이유는 사용자 지정 컬렉션 형식을 만드는 것입니다. 당신이 찾을 때까지 당신은 ICollection에 <>에서 상속 때문에 그런 어디서나 방법은 ICollection에 <>의 입력 변수를 가지고, 새로운 사용자 지정 컬렉션 유형에 전달 될 수 있습니다.

를 귀하의 경우에는, 당신은 단순히> 목록 <를 사용할 수 있습니다 커스텀 컬렉션을 생성 할 필요가있다.