C#프로그래밍

27일 복습

노재두내 2023. 7. 27. 22:23

대리자 연습( 주석 순서 기억하기)

1.메서드 정의

2. 대리자 형식 정의

3. 대리자 인스턴스 생성 및 메서드 연결

4. 대리자 호출

대리자는 연결하고자하는 메서드와 매개변수와 반환 형식이 같아야한다,  delegate를 사용

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class App
    {
        //2. 대리자 형식 정의
        delegate void MyDelegate();
        public App()
        {
            //3.대리자 인스턴스 생성 및 메서드 연결 
            MyDelegate myDel = new MyDelegate(this.SayHello);
            //4.대리자 호출
            myDel();
        }
        //1. 메서드 정의
        void SayHello()
        {
            Console.WriteLine("안녕하세요");
        }
    }
}

매개변수 있는 대리자

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using System.Threading.Tasks;

namespace LearnDotnet
{
    public class App
    {
        //2.  대리자 형식 정의
        delegate int MyDelegate(int a, int b);
        public App()
        {
            //3. 대리자 인스턴스화, 메서드 연결
            MyDelegate myDel = new MyDelegate(this.Sum);
            //4. 대리자 호출 
            int sum = myDel(3, 4);
            Console.WriteLine(myDel(3,4));
        }
        //1.메서드 정의
        int Sum(int a,int b)
        {
            return a + b;
        }
    }
}

Console,WriteLine(sum)  이렇게 말고 myDel(3,4)이렇게 바로 다이렉트로 써도된다는 것을 알게 됨

 

 

2.람다 연습

메서드 정의 X

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    class App
    {
        delegate void MyDel();
        public App()
        {
            MyDel del = () =>
            {
                Console.WriteLine("안녕하세요");
            };
            del();
        }
        
    }
}

매개변수 O

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    class App
    {
        //1.대리자 형식 정의
        delegate void MyDel(string name);
        public App()
        {
            //대리자 인스턴스화
            MyDel del = (name) => {
                Console.WriteLine("{0}님 안녕하세요", name);
            };

            del("홍길동");
        }
        
    }
}

Hero 에서 Move 메서드

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    public class App
    {
        //1.대리자 형식 정의
        public delegate void DelHeroMoveComplete();
        //생성자
        public App()
        {
            //2.대리자 인스턴스화
            DelHeroMoveComplete del = () => {
                Console.WriteLine("영웅이 이동완료했습니다");
            };

            Hero hero = new Hero();
            hero.Move(del);
        }
        
    }
}

3.Action 대리자 Func 대리자 

Action대리자는 리턴 값이 없는 함수에서 Func은 있는 함수에서

 

action 대리자 연습

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    public class App
    {
        
        //생성자
        public App()
        {
            

            Hero hero = new Hero();
            hero.moveComplete = () => {
                Console.WriteLine("영웅이 이동완료 했습니다");
            };
            hero.Move();
        }
        
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace practice2
{
    public class Hero
    {
        public Action moveComplete;
        public Hero()
        {

        }
        public void Move()
        {
            Console.WriteLine("이동중");

            this.moveComplete();
        }
    }
}

 

4.