2014년 5월 20일 화요일

[오라클자바커뮤니티 닷넷 델리게이트 교육]C# Func delagate,닷넷C#Func델리게이트,무명함수,익명메소드, 과거 함수 포인터 같은거죠^^

[오라클자바커뮤니티 닷넷 델리게이트 교육]C# Func delagate,닷넷C#Func델리게이트,무명함수,익명메소드, 과거 함수 포인터 같은거죠^^

하나의 익명메소드와 무명함수를 만들기 위해 매번 별개의 델리게이트를 선언해야 하는 불편함이 있다. 이 문제를 위해 MS에서는 Func, Action 델리게이트를 준비 했는데 Func 델리게이트는 결과를 반환하는 메소드를 참조하고 Action 델리게이트는 결과를 반환하지 않는 메소드를 참조한다.

Func 델리게이트는 결과를 반환하는 메소드를 참조하기 위해 만들어 졌는데 닷넷4.0 프레임워크에는 대략 17가지의 Func 델리게이트가 준비되어 있다.


public delegate TResult Func<out TResult>()
public delegate TResult Func<int T, out TResult>(T arg)
public delegate TResult Func<int T1, in T2, out TResult>(T1 arg, T2 arg)
public delegate TResult Func<int T1, in T2, in T3, out TResult>(T1 arg, T2 arg, T3 arg)

……
……
public delegate TResult Func<in T1,,,in T16, out TResult>(T1 arg, T2 arg, T3 arg,,, T16 arg)

모든 Func 델리게이트의 마지막 매개변수가 반환형식 이다.

[사용 예문]

입력 매개 변수가 없는 경우

Func<int> func = () => 10;   //압력 매개변수 없으며 무조건 10 리턴
Console.WriteLine(func());

입력 매개 변수가 하나인 경우

Func<int, int> func = (x) => x*x;  //입력 매개변수는 x하나, 반환형식 int
Console.WriteLine(func(3));      //9 리턴




[예제]

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

namespace ConsoleApplication4
{
    //델리게이트 정의
    delegate bool Onj1();
    delegate bool Onj2(int i);

    class Program
    {

        static void Main(string[] args)
        {
            Func<int> func1 = () => 10;
            Console.WriteLine(func1());

            Func<int, int> func2 = (x) => x * x;
            Console.WriteLine("func2 :: {0}", func2(2));

            //Func<T, Tresult> 람다식 할당
            Func<string, string> func3 = (str) => str.ToUpper();
            Console.WriteLine("func3 :: {0}", func3("onjprogramming"));

            //Func<T, TResult> delegate할당, 문자열을 문자배열로 리턴
            Func<string, char[]> func4 = delegate(string str) { return str.ToArray(); };
            Console.WriteLine("func4 :: 배열크기={0}, 처음요소={1}", func4("onjprogramming").Count(), func4("onjprogramming")[0]);

            //Func<T, TResult>에서 함수를 지정
            Func<string, string> func5 = convertUpper;
            Console.WriteLine("onj 대문자로 {0}", func5("onj"));

            Func<string, string> func6 = str => str.ToLower();
            string[] onjs = { "ONJ", "ORACLEJAVA커뮤니티", "ONJPROGRAMMING", "ORACLEJAVANEW.KR" };              
            IEnumerable<String> onjWords = onjs.Select(func6);
            foreach (string word in onjWords)     Console.WriteLine(word);     

        }

        static string convertUpper(string str)
        {
            return str.ToUpper();
        }
    }
}




[결과]
10
func2 :: 4
func3 :: ONJPROGRAMMING
func4 :: 배열크기=14, 처음요소=o
onj를 대문자로 ONJ
onj
oraclejava커뮤니티
onjprogramming
oraclejavanew.kr

오라클자바커뮤니티 오프라인 교육센터, 개발자 전문교육, 개인80%환급 www.oraclejavacommunity.com

평일주간(9:30~18:20) 개강
(5/26)SQL초보에서실전전문가까지
(5/26)안드로이드개발자과정
(5/26)C#4.0,ADO.NET,Network 프로그래밍
(5/26)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(5/27)JAVA,ORACLE 실무개발자과정
(5/28)[교육전취업확정]Spring,MyBatis,XPlatform실무프로젝트과정
(5/30)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(6/09)[기업100%환급]PL/SQL,ORACLE HINT,TUNING

평일야간(19:00~21:50) 개강
(5/22)안드로이드개발자과정
(5/22)C#,ASP.NET마스터
(5/23)SQL초보에서실전전문가까지
(5/26)웹퍼블리싱 마스터
(5/28)Spring3.X, MyBatis, Hibernate실무과정
(5/29)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

주말(10:00~17:50) 개강
(5/24)Spring3.X, MyBatis, Hibernate실무과정
(5/24)C#,ASP.NET마스터
(5/24)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(5/24)안드로이드개발자과정
(5/24)SQL초보에서실전전문가까지
(5/24)실무예제로 배워보는 jQuery(개발자/디자이너를위한)

주말저녁(18:30~22:20) 개강
(5/24)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지

댓글 없음:

댓글 쓰기