2014-11-07 4 views
1

현재 XNA에서 게임을 만들고 있는데 문자열을 사용하여 클래스를 만드는 방법을 찾으려고했습니다.문자열을 사용하여 클래스의 새 인스턴스 만들기

string classtype = "DrillTool"; //classtype/classname 
InvItem item = new .... ("DrillTool"); //this is where i'm lost! 

DrillTool 클래스는 다음과 같습니다 :

class DrillTool : InvItem 

//The constructor is something like this 
public DrillTool(string itemName, string spriteName, string storedBatteryPower etc.) 

그래서 내 질문은 : 어떻게 나는를 사용하여 클래스의 새 인스턴스를 만들려면 어떻게해야합니까 나는 이런 식으로 뭔가를 작업 할 끈? 그리고 나는 새로 만든 클래스 여기 아래

구체적인 모습에 매개 변수 또는 "생성자 값"에 어떻게 전달할 수 있습니다 내가 유지할 수 있도록 MyClass에 클래스의 InvItem (InventoryItem의) 클래스에서 상속

그 (것)들은 전부 품목이어야하기 때문에, 동일한 명부에있는 다른 종류. 아이템들은 다른 능력/값과 명령을 갖기를 원하기 때문에 다른 클래스로 나누어집니다.

다른 질문 : if 문없이 클래스를 유형/클래스로 캐스팅하려면 어떻게해야합니까? 이처럼

:

InvItem drillItem = new DrillTool(etc.); 

(Typeof(drillItem))drillItem.valueThatOnlyExistsInDrillToolClass; //? 
//I can't access the DrillTool values of drillItem if it has not been "converted". 

그리고 안 함 :

if (drillItem.GetType() == typeof(DrillTool)) 
{ 
    currentItem = (DrillTool)drillItem; 
    currentItem.valueThatOnlyExistsInDrillToolClass; 
} 
else if (etc.) //I am gonna end up with over 20 classes at least. 

난 곳이나 그럼 그냥 필요한 것을 말해, 더 많은 정보를 필요로하는 경우 불분명입니다 경우

.

도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+1

사이드 노트; 다운 캐스팅은 코드 - 냄새입니다. 왜 그렇게 많은 것을 필요로하는지 판단해야합니다. 주조 필요를 제거하십시오. – BradleyDotNET

+0

일반 항목 클래스 인 클래스를 만들면 어떨까요? 그런 다음 클래스의 모든 정보를 저장하고 항목 이름과 항목 유형을 저장하므로 이와 같은 클래스를 만들 필요가 없습니다. – deathismyfriend

+1

@deathismyfriend 님의 댓글에 댓글을 남겼습니다. 다형성이 모든 "특정"세부 사항을 다룰 수 있도록 항목을 설정해야합니다. 특정 유형에 대해서는 신경 쓰지 않아야합니다. – BradleyDotNET

답변

0

이 작업을 수행해야하는 경우 잘못 처리했을 가능성이 큽니다.

좋습니다. 당신은 정말 당신의 두 번째 질문을 이해하지 못하는 Activator.CreateInstance (MSDN)

Type myType = Type.GetType(typeString); 
object obj = Activator.CreateInstance(myType, myargs, "MyOtherStringArgs"); 

의 과부하가 필요합니다; 이 캐스트는 작동합니다 :

DrillTool tool = (DrillTool)obj; 

물론 캐스트가 유효하지 않은 경우 throw됩니다. 이러한 예외를 피하려면 if 문 (is 또는 typeof 사용)이 필요합니다. 당신은이를 사용할 수 있습니다 캐스트가 실패 할 경우

DrillTool tool = obj as DrillTool; 

null을 반환하는.

dynamic 키워드를 사용하지 않고을 "동적"유형으로 캐스트 할 수 없습니다. 이 동작은 .NET에서 지원되거나 허용되지 않습니다. 추론은 분명해야합니다. 캐릭터 라인이 다른 경우에, 결과의 형태에 특별한 property가없는 경우는 어떨까요. .NET은 유형 안전성을 확보하기가 정말로 어려우므로 이러한 유형의 동작은 유형 안전입니다.

당신은이 일을하는 고통을 겪고있는 것처럼 보입니다. 그것은 첫 번째 문장의 지표가되어야합니다. 정말로 이것을하지 말아야합니다..유효한 사용 사례가 몇 가지 있습니다. 나는 진심으로 당신이 그들 중 하나를 가지고 있는지 의심 스럽다.

+0

내가 myargs를 사용하는 방법에 대한 예제를 줄 수 있습니까? – MasterXD

+0

그것의 개체 배열, 그냥 거기에 원하는 매개 변수를 전달합니다. 프레임 워크는 전달한 유형을 기반으로 유형에 가장 적합한 생성자를 선택합니다. 게시 한 것 외에 어떤 예가 될지 잘 모르겠습니다. – BradleyDotNET

+0

Ok thx. : D 형식이나 InvItem에 Parse에 대한 정의가 없더라도 새로운 문제. XD는 무엇을해야합니까? – MasterXD

관련 문제