์ƒํ™ฉ :


๊ณต๋ถ€ํ•œ๊ฑธ ์จ๋จน์–ด๋ณด๋ ค๊ณ  ์ฝ˜์†”ํ™”๋ฉด๊ธฐ๋ฐ˜ ํ…์ŠคํŠธ๊ฒŒ์ž„์„ ๋งŒ๋“ค๊ณ  ์žˆ์Œ

์ผ๋‹จ


class MyRoom_ {

public string Name { set; } = "๋‚˜์˜ ๋ฐฉ"; }


class Toilet_ {

public string Name { set; } = "ํ™”์žฅ์‹ค"; }


์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์น˜๊ณ 

ํŽธ์˜์ƒ ๊ฐœ์ฒด MyRoom์ด๋ž‘ ๊ฐœ์ฒด Toilet์„ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ์ณ


======

ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ : ๋‚˜์˜ ๋ฐฉ

======


์š”๋Ÿฐ ์ƒํ™ฉ์—์„œ ReadLine() = "Toilet"์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ


======

ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ : ํ™”์žฅ์‹ค

======


์š”๋ ‡๊ฒŒ ๋์œผ๋ฉด ์ข‹๊ฒ ์Œ. ๊ทธ๋ ‡๋‹ค๋ฉด

======

string roomName = ReadLine(); // Toilet์„ ์ž…๋ ฅํ•ด์„œ roomName = "Toilet"์ด ๋จ

console.writeline("ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ : " + x(string roomName).Name) // ๊ฒฐ๊ณผ : Toilet.Name์ด ์ถœ๋ ฅ๋จ

======


์ด๋Ÿฐ ๋А๋‚Œ์˜ ๋‹ท๋„ท ๊ธฐ๋ณธ ํ•จ์ˆ˜ x๊ฐ€ ์™ ์ง€ ์žˆ์„๊ฑฐ ๊ฐ™์€๋ฐ ์ฐพ์•„๋ณด์ž! ๋ผ๋Š” ์ƒ๊ฐ์„ ํ•จ


๊ทธ๋ž˜์„œ ๊ตฌ๊ธ€์— convert string to static class name, convert string to object name ๋“ฑ๋“ฑ์„ ๊ฒ€์ƒ‰ํ•ด๋ดค๋Š”๋ฐ


๋‚˜๋ž‘ ๋˜‘๊ฐ™์€ ์งˆ๋ฌธ์„ stackoverflow๊ฐ™์€ ๋ฐ๋‹ค๊ฐ€ ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ๋งŽ๋”๋ผ๊ตฌ


๊ทธ๋ž˜์„œ ๋‹ต๋ณ€์„ ์ฐธ๊ณ ํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ



Type t = Type.GetType("Toilet");

ConstructorInfo c = t.GetConstructor(Type.EmptyTypes);

var v1 = c.Invoke(new object[] { });

PropertyInfo p = t.GetProperty("Name");

var v2 = p.GetValue(v1);


๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์˜ด. ๊ทธ๋ž˜์„œ...


======

Type t = Type.GetType(ReadLine()); // enum ์“ฐ๋“ ๊ฐ€ ํ•ด์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๊ณ  ์น˜๊ณ 

ConstructorInfo c = t.GetConstructor(Type.EmptyTypes);

var v1 = c.Invoke(new object[] { });

PropertyInfo p = t.GetProperty("Name");

var v2 = p.GetValue(v1);

Console.WriteLine(("ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ : " + v2); // ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ : ํ™”์žฅ์‹ค

======


์ผ๋‹จ ์ž‘?๋™์€ ํ•˜๋Š”๋ฐ...

์ด๊ฒŒ ์ตœ์„ ์ž„?


์ตœ์„ ์ด๋ผ๊ณ  ์น˜๋ฉด..

๋งŒ์•ฝ MyRoom์ด๋ž‘ Toilet ํด๋ž˜์Šค๊ฐ€ static์ด๋ฉด ์ด๊ฑฐ ์–ด์ผ€ ์ฒ˜๋ฆฌํ•จ?