저는 GetParameter를 사용하여 생성자에 필요한 매개 변수를 결정했습니다. 나는 그 (것)들의 명부를 얻을 수있다. 이제 ctor를 호출하려고합니다. 빈 공간이 없으면 가능합니까?빈 기본 생성자가 없으면 relfection을 사용하여 생성자를 동적으로 호출 할 수 있습니까?
답변
어떤 언어입니까? C#을 (를) 사용할 수 있습니다.
Activator.CreateInstance(typeof(X), constructorparm1, constructorparam2...)
그래서 나는 무엇을 다시 얻을 수 있습니까? 일반 객체? 내가 다루고있는 타입으로 캐스팅 할 수 있니? – topwik
개체를 다시 가져옵니다. 그것을 캐스팅하거나 AS 연산자를 사용하여 객체를 원하는 유형으로 가져와야합니다. X instance = (X) Activator.CreateInstance (typeof (X), constructorparm1, constructorparam2 ...) – saret
질문을 생각합니다. 그때 나는 ParameterInfo에서 시스템 유형을 어떻게 만들지 묻는 것이 필요합니까? 나는 나의 ctor를위한 params의 목록을 얻는다. 나는 처음 2 개가 bool이고 2 번째가 int 인 paramInfo를 얻는다. 이제 2 개의 bool을 포함하는 배열을 생성해야합니다. true 또는 flase (UI 또는 기타의 사용자 입력을 기반으로) 및 UI 또는 사용자 입력에서 설정된 2 개의 int로 설정할 수 있습니다. – topwik
이게 당신이 찾고 있는게 있니? 이렇게하면 문자열을 생성자에 전달하는 SqlConnection의 인스턴스가 만들어집니다. 더 많은 값을 전달하려면 배열에 값을 추가하기 만하면됩니다.
SqlConnection conn;
conn = (SqlConnection)System.Activator.CreateInstance(typeof(SqlConnection), new object[] { "Server=myserver" });
Console.WriteLine(conn.ConnectionString);
예! 그러나 나의 매개 변수는 그것보다 역동적 일 필요가있다. 나는 생성자를보아야하고 매개 변수가 있다면 각 매개 변수를보고 부울 또는 int와 같은 시스템 유형을 얻은 다음 해당 매개 변수의 배열을 작성하고 값을 설정 한 다음이를 생성에 전달해야합니다. 인스턴스 또는 ctor.invoke ... ParameterInfo [] pi = t.GetConstructors() [0] .GetParameters(); foreach (pi의 ParameterInfo p) { if (p is boolean) {args [idx] = 새 부울 (true); } } 잘 모르겠습니다. 이 같은. 나는 무엇이 가능한지 확신하지 못한다. } – topwik
유형 realType = Type.GetType (paramInfo.ParameterType.FullName); 트릭을 할 수 있습니다. – topwik
이걸 잊어 버려. 이 작업을 수행하는 데 복잡한 방법이 있지만 어셈블리에서 선언 된 각 유형에 기본 빈 생성자가 있는지 확인하여 객체를 가져올 때 매개 변수에 대해 걱정할 필요가 없습니다. 그렇다면 속성을 살펴보고 값을 설정하는 것만으로도 충분합니다. 더 쉽기를 바랍니다. 다른하실 말씀 있나요? 누군가? 그것이 열심히라면, SO는 분명히 저에게서 또 다른 질문을 볼 것입니다! – topwik
어떤 언어입니까? 나는 자바에서 가능하다는 것을 알고 있지만, C#과 같은 이런 유형의 리플렉션을 지원하는 다른 많은 언어들이있다. – Jonathan
C#. 고마워요. 나는 이것을 시험해 보겠다. 건배. – topwik