๋ฌธ์ ๋๋ ์์ค๋
public void addText(string Input_main) {
var value = this.GetType().GetField(Input_main).GetValue(this);
Debug.Log(value);
}
์ ํ ๊ด๋ จ์๊ฑฐ๋ ์ฃผ์์ ๋นผ๋ฉด ์ด ๋ถ๋ถ์
์ค๋ฅ ์ฝ๋๋ย
NullReferenceException: Object reference not set to an instance of an object
๊ทธ๋ฆฌ๊ณ ์๋ ํ๋ ค๋ ๊ฑด
Input_findย = textlist_??.GetInastance (). ???? [0];
์์ฒ๋ผ ์ฑ๊ธํค์ผ๋ก ๋ง๋ textlist ์ ์ ๊ทผํ๋ GetInastance ๋ฅผ ์ฐ๋๋ฐ ์ด๋ ??๋ ???? ๋ฅผ ๊ณ์ ๋ฐ๊ฟ์ฃผ๋ ค๊ณ (??๋ ๋ฐ๋ก ์ค์ ํด๋ ์ด๋ฆ๋ค, ????๋ List<t>๋ก ๋ง๋ ๋ฆฌ์คํธ)
์๊ทธ๋ฌ๋ฉด ํ๋ํ๋ ๋ค ๋ง๋ค์ด์ผ ํด์, ์ฌ๊ธฐ๋ค๊ฐ ๋ฐ์ ๋์จ ๋ฆฌํ๋ ์ ์ ์ฐ๋ฉด ์ด๋จ๊น ํด์ ๊ทธ๋ฌ์ (์๋๋ฉด ???? ๋ถ๋ถ์ ํน์ ์ด๋ฆ + ์ซ์ ์์ผ๋ก ๊ท์น์ด ์์ด์)
๋ฌธ์ ๋๋ ์์ค์์ Input_main ์ ๋ฐ๋ก Public string test = "testtext"; ๋ก ์ ์ธํ๊ณ , Input_main ์๋ฆฌ์ ๋์ test๋ฅผ ๋ฃ์ด๋ด๋ ์ค๋ฅ๊ฐ ๋๊ฐ์ด ๋์ด
GetValue๋ฅผ ์ ๊ฑฐํ๋ฉด Debug.Log์ Null ํ์๊ฐ ๋ธ
GetInastance ์ด๊ฑฐ๋ ๋๊ฐ ์ฐ๋ ์ฑ๊ธํคํจํด์์ ์คํ๋๊น ๊ฐ์ GetInstance๋ก ์์ ํ๋ฉด๋จ ๋ญ๊ฐ ์๋๊ฑฐ๋ ์ฑ๋ฅ์ ์ง์ฅ์๋๊ฑด ์๋๋ฐ ์๊น ๊ธ์์ ์ ๋ค๋ฅธ์ฌ๋๋ค์ด๋ ๋ค๋ฅด์ง? ๋ผ๊ณ ํ๊ธธ๋ ์จ๋
NullReferenceException ์ด๋ฉด addTextํจ์๊ฐ ์๋ ํด๋์ค์์ Input_main์ ์ด๋ฆ์ ๊ฐ์ง ๋ณ์๊ฐ ์์์ ๊ทธ๋ฆฌ๊ณ GetValue๋ ๊ฐ์ ๊ฐ์ ธ์ค๋๊ฑฐ์ผ ์๋ฅผ๋ค๋ฉด Def = 3.0 ์ด๋ฉด GetValue๋ก ๊ฐ์ ธ์ค๋ฉด 3.0์ด๋ผ๋ ๊ฐ๋ง ๊ฐ์ง๊ณ ์๋๊ฑฐ์ง
์ใ ใ ๊ทธ๊ฒ ๊ทธ๋ฅ ์คํ์๊ตฌ๋. ์ a๋ฅผ ๋ฃ์์ง ๊ทธ๋ฅ ๋ฌด์์์ ์ผ๋ก a๋ฅผ ์ง์ด๋ฃ์๊ฑฐ์๋๋ด. ์ง์ฅ์ ์๋ค๊ณ ํ๋๋ฐ ๋ ๋ง์ ์ด๋ ๊ฒ ํด๋๋ค๊ฐ ๋์ค์ a ๋น ๋จ๋ฆฌ๊ณ ๋๋ฆฌ๊ณ ์ "์ ์๋ฌ๋จ์ง?" ์ด๋ด ๊ฑฐ ๊ฐ์์ ๊ทธ๋ฅ ์์ ํด์ผ๊ฒ๋ฐ
ํด๋์ค ์์์ ๋ณ์๋ฅผ ์๋ก ์ ์ํด์ผ ํ๋๊ฑฐ์ผ? ๊ทธ๋ฌ๋๊น addText ํจ์์์ ๋ฐ๋ก ๋ญ string s = "asdf"; ์ด๋ฐ์์ผ๋ก ์ ์๋ฅผ ํ ๋ค์ GetField(s) ์ด๋ ๊ฒ? ๊ทธ๋ผ addText๊ฐ ๊ฐ์ ธ์ค๋ Input_main์ ์ฐ๋ ค๋ฉด... ํด๋์ค ์์์ string s = Input_main; ์ด๋ ๊ฒ ์ ์ํ๊ณ ํด์ผํ ๊น?
Input_find = textlist_XXX.GetInstance ()๋ฅผ ํ๋ ค๋ฉด textlist_XXX๊ฐ ํด๋์ค ๋ช ์ผ ๊บผ ์๋์ผ ์ฑ๊ธํคํจํด ์ฐ๋๊น ๊ทธ๋ฐ๋ฐ GetValue๋ ํด๋น ํ์ ์ ๊ฐ์ง๋๊ฒ ์๋๋ผ ๊ฐ์ ๊ฐ์ง๊ณ ์๋๊ฑฐ๋๊น ์๋์ง Reflection ์ฐ๋ ๊ฒ ๋ณด๋ค ์ค๊ณ๋ฐฉ์์ ๋ฐ๊พธ๋๊ฒ์ด ๋์ ๊ฒ ๊ฐ๊ธฐ๋ํ๊ณ
GetValue๊ฐ ํด๋น ํ์ ์ด ์๋๋ผ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฑด ์... ์๋ฅผ ๋ค๋ฉด ๋ด๊ฐ textlist_hello ์ ์ ๊ทผํ๊ณ ์ถ๋ค ํ๋ฉด hello๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๊ณ ์๋ string ๋ณ์, ๊ทธ๋ฌ๋๊น public string hi = "hello"; ์ด๋ฐ๊ฒ ์๋ค ํ๋ฉด ์ ๋ฆฌํ๋ ์ ๋ฐฉ๋ฒ์ผ๋ก textlist_XXX ์ด๊ฑธ ํ์ฉํ๊ธฐ ํ๋ค๋ค ๊ทธ๋ฐ ์๋ฏผ๊ฐ?
์ ์์ ๋ฌธ์์ด์ ์กฐํฉํด์ ๋ฉ์๋?๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์์๊น? ์๋ฅผ๋ค๋ฉด a = "ret", b = "urn;" ์ด๋ฉด (a+b)๋ก return;์ ์คํ...๊ฐ์ ๊ฑด ํ๋ค๊ฒ ์ง? MakeMethod ์ด์ฉ๊ตฌ ํ๋ ๊ฑธ ์ฐพ๊ธด ํ๋๋ฐ ์ด๊ฒ ๋ง๋์ง ์๋์ง...
C# Evaluation ์ชฝ์ ์ฐพ์๋ด ๊ทธ๋ฅ ๋ฉ์๋ ์ด๋ฆ๊ฐ์ง๊ณ ํด๋น ๋ฉ์๋๋ฅผ ์คํํ๋ ค๋๊ฑฐ๋ฉด invoke๋ก๋ ์ถฉ๋ถํ๋ฐ..