2011-05-16 4 views
0

클래스 객체를 동적으로 만들도록 목록을 선언했습니다. 키를 사용하여 컬렉션 항목에 액세스

List<clsFormula> oFormula = new List<clsFormula>(); 
for (int i = 0; i < 4; i++) 
{ 
    oFormula.Add(new clsFormula()); 
} 

내가

oFormula[2].FunctioName(); 

내 질문처럼 내 코드를 작성합니다 개체 번호 2의 기능을 사용하려면

입니다 : 내가 번호를 사용하는 대신 객체에 직접 이름을 정의 할 수 있습니까? 그래서 그것은 oFormula["StringName"].FunctionName()과 같을 것입니다; 어떤 종류의 코드를 런타임 객체를 선언 할 때 사용해야합니까?

+0

'' – Menahem

+0

리스트를 사용하는 대신'Dictionary '를 사용할 수 있습니다 ~! '사전 of = 새 사전 (); of.Add ("Plus", 새 clsFormula()); MessageBox.Show (of [ "Plus"]. ("+", 1, 2) .ToString()); – Hero

+0

네, 그러나 항목을 사전에 삽입 할 때 항목의 이름을 알아야합니다. KeyedCollection은 컬렉션 자체에 이것을 캡슐화합니다. – MattDavey

답변

0

자바가 아니라는 사실을 깨달으십시오.하지만 삭제 한도에 도달하면 열어 둡니다.


해당 자바.

List에는 색인이 포함되어 있습니다. 귀하의 요구에 대한 당신은 문자열 매개 변수를 사용하는 인덱서가없는 java.util.Map

Map<String, clsForumla> map = new Map<String, clsForumla>(); 
map.put("firstObj",new clsForumla()); 
map.put("secondObj",new clsForumla()); 
map.put("thirdObj",new clsForumla()); 


//calling method on second object 

map.get("secondObj").foo(); 
+0

그가 "Add"라고했기 때문에 Java가 아닙니다. 대문자로 메소드 이름을 시작하는 것은 Microsoft의 일입니다. – Neil

+0

역사에서 @ 네일 예 마이크로 소프트 놈 보인다. 덕분에 –

0

목록을 사용해야합니다. List<T>에서 상속 받아 문자열을 받아들이는 인덱서를 만들면 항목을 찾아 반환하는 로직을 구현해야합니다.

public class SampleList<T> : List<T> 
{ 
public T this(string name) 
{ 
get 
{ 
//Find the Item and return. 
} 
} 
} 
+0

내장 된 이름 인덱서가있는 KeyedCollection에서 구현하는 것이 더 좋습니다. – MattDavey

1

새 컬렉션 형식을 만들고 System.Collections.ObjectModel.KeyedCollection에서 상속합니다. GetKeyForItem 메서드를 재정의하고 clsFormula 개체의 이름을 반환합니다. 내가 솔루션에 대한 샘플 응용 프로그램을 만들었습니다

http://msdn.microsoft.com/en-us/library/ms132438.aspx

public class clsFormulaCollection : KeyedCollection<string, clsFormula> 
{ 
    protected override string GetKeyForItem(clsFormula item) 
    { 
     return item.Name; 
    } 
} 

clsFormulaCollection oFormula = new clsFormulaCollection(); 

for (int i = 0; i < 4; i++) 
{ 
    oFormula.Add(new clsFormula()); 
} 

oFormula["FormulaName"].SomeFunction(); 
+0

저는 Framework3.5를 사용하고 있습니다. KeyCollection은 framework4.0에서만 작동 할 수 있다고 생각합니다. – Hero

+0

KeyedCollection은 .NET 2.0 이후부터 사용할 수 있습니다. – MattDavey

0

이 코드는 나를 위해 잘 작동, 나는 아래와 같은 클래스가

,

public class ClsFormula 
{ 
    public ClsFormula() 
    { 

    } 

    public int Function1() 
    { 
     return 5 + 6; 
    } 
} 

이제 click 이벤트 중 하나에이 클래스를 사용하여 lis 만들기 t 클래스 개체,

List<ClsFormula> clsformula = new List<ClsFormula>(); 

     for (int i = 0; i < 4; i = i + 1) 
     { 
      ClsFormula objcls = new ClsFormula(); 
      clsformula.Add(objcls); 
     } 

     MessageBox.Show(clsformula[2].Function1().ToString()); 

그것은 나를 위해 잘 작동합니다.

관련 문제