티스토리 뷰

======================================================

안녕하세요 Doridori 입니다. 


이번 강의는 delegate에 대한 강의 입니다. 


프로그램을 하면서 어렵다고 느껴질만 한 내용인데 사용이 필요한 이유를 알고 쓰면 필요한 부분에 맞게 사용 할 수 있을것 같습니다. 


어렵지 않게 진행 했다고 생각 하니 강의를 보시면서 천천히 따라오시면 좋을것 같습니다. ^^

======================================================


Delegate 1 (delegate의 사용)


Source UI) Study_24_Delegate 1(UI).zip

Soruce 전체) Study_24_Delegate 1.zip

교재) 24강 Delegate 1 (delegate의 사용).pdf







이번강의는 delegate에 대한 강의 입니다. 


실제로 사용할 때에는 Event와 함께 사용되는 경우가 많지만 기본 delegate의 내용을 알고 있으면 event와 함께 사용할 때 내용을 알고 사용할 수 있을것 같아서 이번 강의를 먼저 준비 하게되었습니다. 


delegate의 경우 결론적으로는 "정해놓은 함수를 한번 더 거쳐서 호출해 준다" 라고 생각하시면 좋을 것 같습니다.



이번 예제의 경우 만들다 보니 예전에 만들었던 투표하는 예제와 거의 비슷하게 나와서 결국에는 새로 만들었습니다. ㅜㅠ;;


delegate의 사용법을 하나씩 담으려고 하다보니 피자를 주문하는 예제를 만들게 되었습니다. (만족~! ^^)


다음 강의까지 이어서 진행 할 예정이니 한번 만들어보시면 다음강의를 보시는데 조금더 편할것 같습니다. 

(다음강의에 폼을 하나 더만들어서 호출해서 사용할꺼라서 꼭 안해보셔도 되지만 해보시면 이해가 더 잘됩니다. 

(UI 만드는것도 힘들어요 ^^)




강의)


강의는 생각보다 길게 나왔는데 그래도 한번 보시면 도움이 된다고 말씀드리겠습니다. 


그냥 예제만 몇번보고 코드만 따라 적어보시는것 보다 한번 잘 보시고 내것으로 만들면 좋을것 같습니다. 





Source)


소스 중에 델리게이트의 일반화 부분이라던지 object 선언 부분같은 경우는 예제로 사용한 부분이기 때문에 참고만 하시면 될것 같습니다. 

(강의에서는 설명하고 진행 하였습니다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace _24_DelegatePizzaOrder
{
    public partial class Form1 : Form
    {
        public delegate int delFuncDow_Edge(int i);
        public delegate int delFuncTopping(string strOrder, int Ea);
        
        public delegate T delFunc<T>(T i);  // 함수 명 뒤에 <일반화 변수명 - 형식 매개 변수> 을 사용 할 경우 일반화 함수를 지정 할수 있음 (인자 값 Type에 신경 쓰지 않는 형태)
        public delegate A delTest<A>(A i);  // 문자 종류는 상관 없음 일반화 함수를 Delegate에도 적용할 수 있다는 점 (확장개념 일반화 delegate를 delegate의 특징이라고 보기는 어렵지 않을지)
 
        public delegate object delFuncO(object i); // var, object
        
        int _iTotalPrice = 0;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// 주문하기 Button을 Click 했을 때 발생 하는 Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOrder_Click(object sender, EventArgs e)
        {
            delFuncDow_Edge delDow = new delFuncDow_Edge(fDow);
            delFuncDow_Edge delEdge = new delFuncDow_Edge(fEdge);
 
            delFuncTopping delTopping = null;
 
 
            int iDowOrder = 0;
            int iEdgeOrder = 0;
 
            // 선택 도우 확인
            if (rdoDow1.Checked)
            {
                iDowOrder = 1;
            }
            else if (rdoDow2.Checked)
            {
                iDowOrder = 2;
            }
 
            //delDow(iDowOrder);
 
            // 선택 엣지 확인
            if (rdoEdge1.Checked)
            {
                iEdgeOrder = 1;
            }
            else if (rdoEdge2.Checked)
            {
                iEdgeOrder = 2;
            }
 
            //delEdge(iEdgeOrder);
 
            fCallBackDelegate(iDowOrder, delDow);
            fCallBackDelegate(iEdgeOrder, delEdge);
 
 
            // 토핑 선택 확인
            if (cboxTopping1.Checked)
            {
                //delTopping = new delFuncTopping(fTopping1);
                delTopping += fTopping1;
            }
 
            if (cboxTopping2.Checked) delTopping += fTopping2;
            if (cboxTopping3.Checked) delTopping += fTopping3;
 
            delTopping("토핑", (int)numEa.Value);
 
            flboxOrderRed("----------------------------------");
            flboxOrderRed(string.Format("전체 주문 가격은 {0}원 입니다.", _iTotalPrice));
 
        }
 
        #region Function
 
        /// <summary>
        /// O : 선택안함, 1 : 오리지널, 2 : 씬
        /// </summary>
        /// <param name="iOrder"></param>
        /// <returns></returns>
        private int fDow(int iOrder)
        {
            string strOrder = string.Empty;
            int iPrice = 0;
 
            if (iOrder == 1)
            {
                iPrice = 10000;
                strOrder = string.Format("도우는 오리지널을 선택 하셨습니다. ({0}원)", iPrice.ToString());
            }
            else if (iOrder == 2)
            {
                iPrice = 11000;
                strOrder = string.Format("도우는 씬을 선택 하셨습니다. ({0}원)", iPrice.ToString());
            }
            else
            {
                strOrder = "도우를 선택하지 않았습니다.";
            }
 
            flboxOrderRed(strOrder);
 
            return _iTotalPrice = _iTotalPrice + iPrice;
        }
 
        /// <summary>
        /// O : 선택안함, 1 : 리치골드, 2 : 치즈크러스터
        /// </summary>
        /// <param name="iOrder"></param>
        /// <returns></returns>
        private int fEdge(int iOrder)
        {
            string strOrder = string.Empty;
            int iPrice = 0;
 
            if (iOrder == 1)
            {
                iPrice = 1000;
                strOrder = string.Format("엣지는 리치골드를 선택 하셨습니다. ({0}원)", iPrice.ToString());
            }
            else if (iOrder == 2)
            {
                iPrice = 2000;
                strOrder = string.Format("엣지는 치즈크러스터를 선택 하셨습니다. ({0}원)", iPrice.ToString());
            }
            else
            {
                strOrder = "엣지는 선택하지 않았습니다.";
            }
 
            flboxOrderRed(strOrder);
 
            return _iTotalPrice = _iTotalPrice + iPrice;
        }
 
        public int fCallBackDelegate(int i, delFuncDow_Edge dFunction)
        {
            return dFunction(i);
        }
 
 
        private int fTopping1(string Order, int iEa)
        {
            string strOrder = string.Empty;
            int iPrice = iEa * 500;
 
            strOrder = string.Format("소세지 {0} {1} 개를 선택 하였습니다. : ({2}원 (1ea 500원)", Order, iEa, iPrice);
 
            flboxOrderRed(strOrder);
 
            return _iTotalPrice = _iTotalPrice + iPrice;
        }
 
        private int fTopping2(string Order, int iEa)
        {
            string strOrder = string.Empty;
            int iPrice = iEa * 200;
 
            strOrder = string.Format("감자 {0} {1} 개를 선택 하였습니다. : ({2}원 (1ea 200원)", Order, iEa, iPrice);
 
            flboxOrderRed(strOrder);
 
            return _iTotalPrice = _iTotalPrice + iPrice;
        }
 
        private int fTopping3(string Order, int iEa)
        {
            string strOrder = string.Empty;
            int iPrice = iEa * 300;
 
            strOrder = string.Format("치즈 {0} {1} 개를 선택 하였습니다. : ({2}원 (1ea 300원)", Order, iEa, iPrice);
 
            flboxOrderRed(strOrder);
 
            return _iTotalPrice = _iTotalPrice + iPrice;
        }
 
 
        private void flboxOrderRed(string strOrder)
        {
            lboxOrder.Items.Add(strOrder);
        }
 
        #endregion
 
 
    }
}
 
cs


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함