프로그래밍/.NetFramework
Delegate(델리게이트) Action<T>, Func<T> 간단사용법
쇠주는참이슬
2014. 3. 12. 15:38
Delegate(델리게이트)로 선언되어 있는 Action, Func 대리자에 대한 간단한 고찰 및 예제~~ 자세한 내용은 MSDN을 참조 -> http://msdn.microsoft.com/ko-kr/library/System(v=vs.110).aspx 무명메소드를 이용하거나, 람다식으로도 사용이 가능하지만, 현재 포스트는 그냥 기본사용 방법에 대해서만 소개한다. Action - 파라미터의 수에따라 0개부터 최대 16개의 파라미터까지 받을 수 있다. - 주의할점은 리턴값이 없어야 한다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Delegate_Action_Func { public partial class SampleAction : Form { public SampleAction() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* Delegate Action입력 : T 타입 Action Action Action Action Action Action<최대 16개 Type 까지가능> 리턴값 : 없음 */ Action act = null; if (textBox1.Text == "준비") { act = Ready; } else if (textBox1.Text == "시작") { act = Start; } else if (textBox1.Text == "중지") { act = Stop; } if (act.Target != null) act(textBox1.Text); } private void Ready(string s){ MessageBox.Show(s); } private void Start(string s){ MessageBox.Show(s); } private void Stop(string s){ MessageBox.Show(s); } } }
Func - 파라미터 수에따라 0개부터 최대 16개의 파라미터까지 받을 수 있다. - Action 과는 달리 리턴값이 있어야 한다.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Delegate_Action_Func { public partial class SampleFunc : Form { public SampleFunc() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { /* Delegate Func입력 : T 타입 Func Func Func Func Func Func<최대 16개 Type 까지가능> 리턴값 : 무조건 있어야함 */ Func fnc = null; if (textBox1.Text == "준비") { fnc = Ready; } else if (textBox1.Text == "시작") { fnc = Start; } else if (textBox1.Text == "중지") { fnc = Stop; } if(fnc.Target != null) { //Func는 함수호출방식으로 호출하면 리턴값을 전달한다 string msg = fnc(); MessageBox.Show(msg); } } private string Ready(){ return "준비"; } private string Start(){ return "시작"; } private string Stop(){ return "정지"; } } }
델리게이트, c#, Action, Func