2009-10-19 2 views
1

클래스 MySetC#에서 컬렉션을 디자인하는 방법

 class MySet 
{ 
    .......  
} 

이 클래스는 다른 유형에 대한 참조를 선언합니다.

(즉)

class MySubSet 
{ 
    .... 
} 

MySubset 유형의 목적은 "하위 집합 ID"를 제공하는 것입니다. 에 MySet 타입의 정수 컬렉션.

 class MySet 
    { 
     int mySetID; 
     AnotherSubSet subset = new AnotherSubSet(); 
     public int MySetID 
     { 
      get { return mySetID; } 
      set { mySetID = value; } 
     } 

     public AnotherSubSet MySubSet 
     { 
      get { return subset; } 
      set { subset = value; } 
     } 
} 




class AnotherSubSet : List<int> 
    { 
     int subsetID; 
     List<int> lst = new List<int>(); 

     public int SubSetID 
     { 
      get { return subsetID; } 
      set { subsetID = value; } 
     } 
    } 

둘 다 최악의 설계 고려 사항을 사용하면 다음 중 하나를 구현하는 데 도움이됩니다. 나는 따라갈 수 있었다.

+0

가 "호"가 "어떻게"다른 무언가를 의미한다. :) – MusiGenesis

답변

0

수 2는이 패턴에 대한 더 나은, 사용 상속하지 구성입니다 - fundementally, 그것은 모음이기 때문이다. 컬렉션이 포함되어 있지 않습니다. 상속은 패스 스루 기능을 작성할 필요없이 기본 클래스의 모든 기능을 제공합니다.

class MySubSet  
{   
    int subsetID;   
    List<int> subset = new List<int>();   
    public List<int> SubSet 
    {    
     get { return subset; }    
     set { subset = value; }   
    }   
    public void Add(int i) { subset.Add(i); } // pass through to subset.Add() 
} 

또는 다음과 같은 비를 사용해야합니다 : 당신이 조성물을 사용하여 컬렉션에 새 항목을 추가 할 경우, 당신은 클래스 MySubSet에 추가() 메서드 방법으로 패스를 추가해야 하나 직관적이고 혼란 구문은 ...

MySet.MySubSet.SubSet.Add(67); 

는 상속과 함께, 당신이 필요

MySet.MySubSet.Add(67); 
2

MySet은 저에게 수집품처럼 보이지 않습니다. 그것은 단지 수업입니다.

'MyEntity'또는 그와 비슷한 것으로 이름을 바꿉니다. 당신이 제공 한 모든 정보에서

List<MyEntity> mySet = new List<MyEntity>(); 
2

, 내가 이런 짓을 했을까 :

public class MyEntity 
{ 
     public int ID { get; set; } // shortcut 
     public List<int> Numbers = new List<int> { get; set; } // shortcut 
} 

미안, 난의 생성자를 확인할 수 없습니다 /Net3.0 그렇게 손 필요가 없습니다 바로 가기가있는 목록은 get/set하지만 카운트하는 이론은 ...

+0

하위 집합의 ID는 어디에 있습니까? – Natrium

+0

@Natrium - 필요한 경우 쉽게 추가 할 수 있지만 subsetID가 MyEntity가 아닌 subset ID에 속하기 때문에 현재는 일대일 관계 – cjk

+0

인 것처럼 무의미 해 보입니다. – Natrium

2

첫 번째 버전은 상속 대신 컴포지션을 사용하는 것이 더 좋습니다. 컬렉션에 속성을 추가하지 않는 것이 좋습니다. 버전 2에서 실제로 수행중인 작업입니다. 컬렉션에는 항목 만 포함되어야합니다. 전문가가 아니기 때문에 다른 사람이 이유에 대해 설명 할 수는 있지만 직렬화 문제가 발생합니다.

+0

+ 1 "inheritance 대신 composition 사용" – Natrium

관련 문제