static void Main(string[] args) { float Value = 1.1323232323f; GTest.ConsolePrint(Value); GTest.ConsolePrint("lolololololol"); GTest.ConsolePrint(13232313232); GTest.ConsolePrint("zzzzzzzzzzzz", "kkkkkkkkkk"); //Inven<GameItem> NewGameItemInven = new Inven<GameItem>(); //GameItem NewItem = new GameItem(); //NewGameItemInven.ItemIn(NewGameItem) //Inven<CashItem> NewCashItemInven = new Inven<CashItem>(); //CashItem NewItem = new CashItem(); //NewCashItemInven.ItemIn(NewCashItem); }
static void Main(string[] args) { GTest.ConsolePrint("아아아아"); GTest.ConsolePrint <int>(3); // <>는 써도대고 안써도댐 GTest.ConsolePrint(3); GTest.ConsolePrint(3.12345f); int i = 20; string s = "dkdkdk"; Console.WriteLine(s); Console.WriteLine(i); // < - 얘네는 제네릭은 아님. 오버로딩을 // 여러개 해놓은 것. // 이녀석은 무조건 <> 써줘야 대ㅔ Inven <GameItem> NewGameInven = new Inven <GameItem>(); // 인벤은 인벤인데, <GameItem>을 담는 인벤이다! Inven <Cashitem> NewCashInven = new Inven <Cashitem>(); // 인벤은 인벤인데, <Cashitem>을 담는 인벤이다! // 제네릭 클래스를 만드는 이유 // 예를 들어보자 : Inven이라는 애가 있어. // 얘는 item[] Arritem; 이란 필드를 가지고 있어. // 근데 item을 두 가지로 나누고 싶은거야. // Cashitem과 Gameitem으로. // 그럼 Inven에다가 item[] 대신 // Cashitem[], Gameitem[] 두 개를 다 만들어놔? // 아니면 아예 Inven을 GameInven, CashInven 두 개로 나눠? // 두 가지 방법 모두 비효율적이지. // 그 아이템타입 하나 빼면 다 똑같을텐데! // 그래서 제네릭을 쓰는거야. // Inven<Item_Type> 이런 식으로. // 그럼 필드는 Item_Type[] ArrItem; 이라하면 되겠지. NewCashInven.ItemIn(0, new Cashitem(10)); Inven <Cashitem> .Test(NewCashInven.GetItem(0)); // 여기서 생기는 궁금증. // 만약 gameitem/cashitem이 item의 자식 클래스라고 하자. // 그럼 부모인 Item을 넣으라고 표시한 곳에 // 자식인 CashItem을 넣어도 될까? 되겠지? 업캐스팅이니까? Inven <Item> NewInven = new Inven <Item>(); NewInven.ItemIn(0, new GameItem(5)); Inven <Item> .Test(NewInven.GetItem(0)); // 대넹. // NewInven.ItemIn(int _number, Item _Item) // Item타입을 넣는 곳에 GameItem을 넣어도 작동된다. // 반대는 불가능. // NewCashInven.ItemIn(0, new Item(10)); // 다운캐스팅이니까. Console.ReadKey(); }