입력된 클래스명의 string으로 클래스를 찾아서 리스트를 만들 수 있을까요?
public class1
{
}
public class2
{
}
.
.
.
.
.
이렇게 사전에 정의된 클래스가 여러개 있고,
string input ="class2"
입력 문자열에 따라
List<class2> list = new List<class2>();
맞는 클래스의 리스트를 만들고 싶습니다.
이것이 가능할까요?
< >이 안에 뭘 넣어야 저게 가능할지 상상이 안되네요.
자바랑 C#쓰고 있습니다 ㅠㅠ
13개의 댓글
무분별한 사용은 차단될 수 있습니다.
잉텔
C#같은데
public class MObject
{
protected string typestr;
}
이런식으로 만든다음에
public class Class1 : MObject
{
}
public class Class2 : MObject
{
}
이런식으로 상속을 받고
List list = new List(); 이렇게 써도되고
C# 최상위 클래스인 object를 사용해서
List list = new List();
이렇게 쓰던가...
김OT
잘 이해가 안되서 이래저래 써주신 내용에서 넣어보고 있는데 안되네요 ㅠㅠㅠ
decltype
님 꺾인 괄호써서 xss방지 필터에서 걸러진 것 같은데요
잉텔
어? 그러네..
여우모피
자바 한정으로 지네릭은 컴파일타임 타입체크 아닌가? 컨테이너에서 원소 타입은 다 지워지는걸로 알고 있는데. 실행시간에는 그냥 List형임
김OT
예제의 저거는 C#에서 하고 있습니다ㅜㅜ
여우모피
http://omegacoder.com/?p=38
최신버전에서 되는지는 모르겠음
여우모피
저기에서 Type 객체를 class2로 넣어주면 되는데 이걸 참고하셈 https://stackoverflow.com/a/11107562
김OT
namespace ConsoleApp1.NewFolder1
{
public static class Class1
{
public static string cl1;
}
}
Type type = Type.GetType("ConsoleApp1.NewFolder1, class1");
List lists = new List;
type 객체를 저 자리에 넣으면 에러뜨네요 ㅠㅠ
decltype
https://stackoverflow.com/questions/2078914/creating-a-generict-type-instance-with-a-variable-containing-the-type
이대로 하면 됨. 단, 리턴되는 list의 타입은 니가 원하는대로 List<T>로 깔끔하게 나오는게 아니라 Object로 나오니 알아서 캐스팅해줘야함.
김OT
object로 나와도 결국 클래스명으로 형변환 선언해줘야 한다면 사실상 문제의 반복이네요 ㅠㅠㅠ
decltype
스태틱 타입에선 못해... 포기해...
결국 뭘 하고 싶은건데? 차라리 파이썬 내지는 자바스크립트 같은 다이나믹 타입에서 처리하고 C#에 연결하는게 나을수도 있음.
잉텔
decltype말대로 컨테이너의 타입을 최상위 클래스로 하는법 밖에 없음