2014년 11월 20일 목요일

36. C# Func delagate,닷넷C#Func델리게이트,무명함수,익명메소드[닷넷C#교육/ADO.NET강좌/ASP.NET교육잘하는곳/C#,ASP.NET교육추천/닷넷실무교육/.NET,C#/ADO.NET교육/닷넷학원/ASP.NET실무교육]

36. 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<intint> func2 = (x) => x * x;
            Console.WriteLine("func2 :: {0}", func2(2));

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

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

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

            Func<stringstring> 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





 [100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷…오라클자바…12-272554
 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육…오라클자바…12-111863
53 [평일100%환급7건]Spring,자바&JSP,안드로이드,웹퍼블리싱,C#닷… 오라클자바…03-151674
52 [주말]C#,ASP.NET마스터 오라클자바…01-311768
51 [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… 오라클자바…01-312543
50 [평일주간야간,주말]C기본&자료구조,알고리즘 오라클자바…01-311402
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… 오라클자바…01-191710
48 [평일야간,주말]안드로이드개발자과정(Android기초실무) 오라클자바…01-111592
47 [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… 오라클자바…01-032109
46 [100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷… 오라클자바…12-272554
45 [평일주간]NoSQL,MongoDB,빅데이터기초과정 오라클자바…12-191820
44 [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… 오라클자바…12-141803
43 [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… 오라클자바…12-111863
42 [평일주간]빅데이터하둡기초과정(BigData Hadoop) 오라클자바…12-091462
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 오라클자바…12-011689
40 [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… 오라클자바…12-011862
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) 오라클자바…12-011338

댓글 없음:

댓글 쓰기