스토리지

[3.24] delegate 복습 본문

Unity/수업내용(C#)

[3.24] delegate 복습

ljw4104 2021. 3. 24. 10:32

1. 반환값이 없는 delegate

using System;

namespace Study10
{
    //대리자 선언
    public delegate void GoHome();
    public delegate void Say(string message);

    public class CarDriver
    {
        public CarDriver()
        {

        }

        public static void GoLeft()
        {
            Console.WriteLine("좌회전");
        }

        //식 람다를 통한 함수선언
        public static void GoRight() => Console.WriteLine("우회전");

        public static void GoForward() => Console.WriteLine("직진");
    }

    public class Mic
    {
        bool broken = false;
        public Mic(bool broken)
        {
            this.broken = broken;
        }

        public void Speak(string message)
        {
            if (!broken)
            {
                Console.WriteLine(message);
            }
            else
            {
                char[] brokenMessage = message.ToCharArray();
                for (int i = 0; i < brokenMessage.Length; i++)
                {
                    Console.Write(brokenMessage[i]);
                    if (i == (brokenMessage.Length - 2) / 2)
                    {
                        Console.Write("...");
                    }
                }
                Console.WriteLine("...");
            }
        }
    }

    public class App
    {
        public App()
        {
            GoHome go = new GoHome(CarDriver.GoLeft);       //C# 1.0
            go += CarDriver.GoRight;                        //최신 방법
            go += CarDriver.GoForward;
            go();
            Console.WriteLine();

            Console.WriteLine("go -= CarDriver.GoRight");
            go -= CarDriver.GoRight;
            go();

            Console.WriteLine();

            Mic mic1 = new Mic(false);
            Mic mic2 = new Mic(true);
            Say say = mic1.Speak;
            say += mic2.Speak;

            say("무야호");
        }
    }
}

 

2. 반환값이 있는 delegate

using System;

namespace Study10
{
    public delegate void DelPrint(string msg);
    public delegate string DelPrintWithLogo(string logo, string msg);

    public class Printer
    {
        public Printer()
        {

        }

        public void Print(string msg)
        {
            Console.WriteLine(msg);
        }

        public string PrintWithLogo(string logo, string msg)
        {
            return msg + '\n' + logo;
        }
    }

    public class App
    {
        public App()
        {
            Printer printer = new Printer();
            DelPrint delPrint = printer.Print;

            delPrint("무한?");

            DelPrint delPrint2 = delegate (string msg)
            {
                Console.WriteLine("*** 무명메서드 ***");
                Console.WriteLine(msg);
            };

            delPrint2("무야호");

            DelPrint delPrint3 = (msg) =>
            {
                Console.WriteLine("*** 람다식 ***");
                Console.WriteLine(msg);
            };

            delPrint3("그만큼 신나시다는 거지");

            string logo = @"oooddxxxkXMWNXXXXKKKKKKKKKKKKKKKKK000000000000000000000000000000000000000000000000000000000000000000
ooooddxxkXMWNNNXXXXXXKKKKKKKKKKKKKK00000000000000000000000000000000000000000000000000000000000000000
ooooddddkXMWWNNNXXXXXXXXXKKKKKKKKKKK0000000000000000000000000000000000000000000000000000000000000000
dxxxxxxkOXWWWWNNNNNNXXXXXXXXXKKKKKKK0000000000000000000000000000000000000000000000000000000000000000
xxxkOkkk0NXxkO0K0O0KNNNXXXXXXXXKKKKKK000000000000000000000000000000000000000000000000000000000000000
olcodcllxN0lclk0kkxONNNNNNNXXXXXKKKKKK00000000000000000000000000000000000000000000000000000000000000
OOxxkOOxkXXOkO0KXX00XNNNNNNNXXXXXKKKKK00K0000OOOOOO0000000000000000000KKKKKKKKKKK0000000000000000000
ooooooooxXWWWWWNNNNNNWNNNNNNNNXXXKKKK0OkkxdollcccccclllloxkO0KK000KKKKKKKKKKKKKKK0000000000000000000
llooooolxXMMMMMMMWWWWWNNNNNNNNXXXKOxddlclllllooc,,,;cll,..',;lx0KKKKKKKKKKKKKKKKKKKK0000000000000000
lllloolldXMMWWMMMWWWWWNNNNNNNXXKxl;,:lccc:c:::::,'.';cc'.......cOKKKKKKKKKKKKKKKKKKK0000000000000000
lllooooldKMWWWWWWWWWWWNNNNNNNXk:'...............................,xKKKKKKKKKKKKKKKKKK0000000000000000
lllooooloKWWNNWWWWWNNNNNNNNXkl'..      ..........................,xKKKKKKKKKKKKKKKKK0000000000000000
llllolllo0WNXXNNNWNNNNNNNXk:..      .............................'cOKKKKKKKKKKKKKKKK0000000000000000
cllllllloONX0OkxO0Oxk0XXXd.        .....',;;;;;;;,''............':cldOKKKKKKKKKKKKKKKK00000000000000
,llllllclk0KOdololc:lOKKKk;.'.. ......',;::cccc::,,'.............,;clok0KKKKKKKKKKKKKK00000000000000
':lllllclxOOxolcc::cxO000xl::;'.';,,'',;;;::ccc:;,''.'''''';:,''',,;clox0XKKKKKKKKKKK000000000000000
.;cllllcldkkxollc::lkOOOdc::,,;:lc:;,,;;;;;::cc:;;,,,,;;;;;::c,.',,,:llod0KKKKKKKKKKK000000000OOOOOO
.':llllccoxxxolc:::lxOko:;;::::odoccccccc::cccclc::::::::::cccc;',;;clollkXXKKKKKKKKKK0000000OOOOOOO
..;cllcccodxxolc::ccoxoc::cclllodolccccc:;;;;;::;,,,,;;:::::::c:;;;:llold0XXKXKKKKKKKKK000000OOOOOOO
:'':llcccodddolccccclllcccoxdllolc:;:::::;,,,,,;,,,,;;;;;;,,,;::ccclloolxKXXXXXXXKKKKKK0000000OOOOOO
:'.;llcccldddolccclllllllcokxlldoc;;;::c::;,,,,,,,,;;;;;;;,,;;::looooodox0XXXXXXXXXKKKK00000000OOOOO
'..,clcccloddolllllllllllclxkxddol::ccc:;,,,''''''''',;;::;;;:::clloodddox0NNXXXXXXKKKKK000000OOOOOO
;..':cc:cloddolllllllcccllldkkkxxollll:;::::;;;;:::::;;;;:;;;;:clollooddood0NNXXXXXXKKKK00000OOOOOOO
:...;cc::loddolllllllclllllloodxdocccccc::::;;;;::::::;;;;;,;:cloodolloooood0XNXXXXXKKKK000OOOOOOOOO
l:,.':c::cooolcllllccccllllllc:cc:::::::::::;;:;;;;;:cc::ccccloolloolllooooookO0KXX0kdoodkOOOOOOOOOO
cllc;::::lol:,;clccccccllllllc:::clol:;,''.''''''',;:;;;;:clllllllllccclodxxolc:clc;'....':dkkkkkkkk
,col:,,,',,,'.';::cc::cccc:::cloxkkOOxlc:,'................',;;::::c:::ldkkxo:'............'cxkkkkkk
';ll:,'..........''',,;;;:codkOkkkko:;:c:;,'....................'',,,;:ccl;'.................;oxkkkk
.,coc;'................'cxkkkkkkOx:...''''...........................'.........................,;;:c
'',;;'..................cxkkkkkkko,.............................    ................................
c,....................;oxkkkkOOkd:............................      ................................
l;.....................''',;::;,...................................  ...............................
;.....................          ..................'.................... ...........................'
,......................            ...............,;,......'.........  .............................
'......................... ......................,:od,....'c;..'cl'.   .............................
................................................,x0K0d,...',',oOKo'. ...............................
.........................  ..'..........:c,.....oKKKKKd'..'cx0KKOc..................................
..........................  .,col;'....'xKOxc,.;OXKKKK0d;cx0KKKKk;..................................
...............................:k00kdl:lOKKKKOxkKKKKKKKK0KXKKKKKx;';::cll;'... .....................
................................,o0KKKK0KKKKKKKKKKKKKKKKKKKKKKKK0000KKK0x:'...'',;;,................
..........................,:;;;;,:d0KKK0xdoxkkox0KKKKKKXKKKKKXKKKK0Odo:;::cdkO00ko;.................
.........................'o:.'ll'.:O00Oc';;',,.'o0KKKKKKKKKKKKKKKK0x,.;c,.:O00xoc;'.  .'............
..........................lo;:ll::d000x,'dx;...,oO0OxccldkOddOKKKKK0c.:o;'dkocll::c:;;:ll. .........
.........................:lllccccloxO0Oo;;;;::.'o0KOddkxoc::d0KKKKK0Oc..,oxl;cxl:;:cc::c,.  ........
........................:xkddc.'cddk0KKK0OOO0x,l00KKKKKKK0O0KKKXK0xll:,,;clokO0Odc:c:;,.     .......
........................,coxOkc:k00KKKKKKKKKKOdk0KXXKKKKKKKKKKKKKK0OOOOOOOOO00Oxoc;'...        .....
....................    ....,:cok0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00xl:,'........        ....
  .................       .....'lOK000K0KK000000000000KK0KKK0KKK0000KK0000Od;'............       ...
    ..............        ....;dO000OO0000000000000000000000000000000000000Oxc'...............      
           .....            .:xOkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkl'................  ..";

            DelPrintWithLogo delPrint4 = printer.PrintWithLogo;
            Console.WriteLine(delPrint4(logo, " 무야호"));
        }
    }
}

*Image를 Ascii code로 바꿔주는 사이트 : 

www.ascii-art-generator.org/

 

Online Ascii Art Creator

Welcome This free online Ascii Art creator allows you to convert images to color or monochrome Ascii Art. You can also convert text to Ascii Banners. For colored Ascii Art we provide a wide range as output formats, including SVG.

www.ascii-art-generator.org

 

Comments