-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
executable file
·531 lines (306 loc) · 150 KB
/
atom.xml
File metadata and controls
executable file
·531 lines (306 loc) · 150 KB
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
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>CYC'S BLOG</title>
<subtitle>CYC'S NOTEBOOK</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://yoursite.com/"/>
<updated>2020-10-31T05:18:07.062Z</updated>
<id>http://yoursite.com/</id>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>C# - 多維陣列</title>
<link href="http://yoursite.com/2020/10/30/2020-10-30/"/>
<id>http://yoursite.com/2020/10/30/2020-10-30/</id>
<published>2020-10-29T16:00:00.000Z</published>
<updated>2020-10-31T05:18:07.062Z</updated>
<content type="html"><![CDATA[<ol><li><p>多維陣列中的元素需要超過一個以上的索引 (編號) 才能指出元素的位置。需要兩個索引的陣列稱為二維陣列,需要三個的稱為三維陣列,以此類推。規則陣列是指每列的陣列元素都相同。</p></li><li><p>以下是一維、二維、三維陣列的宣告與建立方式,以整數陣列為例:</p></li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 宣告並建立一個長度為 2 的一維陣列</span></span><br><span class="line"><span class="keyword">int</span>[] A = <span class="keyword">new</span> <span class="keyword">int</span>[<span class="number">2</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">// 宣告並建立一個 4x4 的二維陣列</span></span><br><span class="line"><span class="keyword">int</span>[,]B=<span class="keyword">new</span> <span class="keyword">int</span>[<span class="number">2</span>,<span class="number">3</span>];</span><br><span class="line"></span><br><span class="line"><span class="comment">// 宣告並建立一個 2x3x4的三維陣列</span></span><br><span class="line"><span class="keyword">int</span>[,,]C=<span class="keyword">new</span> <span class="keyword">int</span>[<span class="number">2</span>,<span class="number">3</span>,<span class="number">4</span>]</span><br></pre></td></tr></table></figure><ol start="3"><li>不同索引長度的陣列使用方式<figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 一維陣列,將 A 中位置為 1 的值改成 10</span></span><br><span class="line">A[<span class="number">1</span>]=<span class="number">10</span>;</span><br><span class="line"><span class="comment">// 二維陣列,將 B 中位置為 (1,0) 的值改成 40</span></span><br><span class="line">B[<span class="number">1</span>,<span class="number">0</span>]=<span class="number">40</span>;</span><br></pre></td></tr></table></figure></li></ol><p><img src="https://i.imgur.com/XSUdxhx.png" alt></p><ol start="4"><li>沒有直接宣告索引長度的寫法<figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//一維陣列</span></span><br><span class="line"><span class="keyword">int</span>[] A = <span class="keyword">new</span> <span class="keyword">int</span>[]{<span class="number">12</span>,<span class="number">30</span>};</span><br><span class="line"><span class="comment">//二維陣列</span></span><br><span class="line"><span class="keyword">int</span>[] B = <span class="keyword">new</span> <span class="keyword">int</span>[,]{{<span class="number">0</span>,<span class="number">1</span>},{<span class="number">2</span>,<span class="number">3</span>}}</span><br><span class="line">B[<span class="number">1</span>,<span class="number">0</span>] <span class="comment">// 2</span></span><br></pre></td></tr></table></figure></li></ol><p><img src="https://i.imgur.com/cVtC7f6.png" alt></p>]]></content>
<summary type="html">
<ol>
<li><p>多維陣列中的元素需要超過一個以上的索引 (編號) 才能指出元素的位置。需要兩個索引的陣列稱為二維陣列,需要三個的稱為三維陣列,以此類推。規則陣列是指每列的陣列元素都相同。</p>
</li>
<li><p>以下是一維、二維、三維陣列的宣告與建立方式,以整數
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - Abstract Class & Abstract Method</title>
<link href="http://yoursite.com/2020/10/14/2020-10-14-01/"/>
<id>http://yoursite.com/2020/10/14/2020-10-14-01/</id>
<published>2020-10-13T16:00:00.000Z</published>
<updated>2020-10-27T02:59:30.000Z</updated>
<content type="html"><![CDATA[<p>一個 method 的組成包含:</p><ol><li>宣告</li><li>內容 (實際執行方式)</li></ol><h1 id="abstract-method"><a href="#abstract-method" class="headerlink" title="abstract method"></a>abstract method</h1><p>C# 中的 method 主要分成兩個部分,宣告與內容。Abstract method 則是一種只有宣告,而沒有實作內容的一種特殊 method。</p><ol><li>abstract method 把實作的工作轉交給繼承的類別來定義。強迫衍生類別實作某些功能</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"> <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Monster mon = <span class="keyword">new</span> Slim();</span><br><span class="line"> Slime s = <span class="keyword">new</span> Slime();</span><br><span class="line"> MessageBox.Show(<span class="string">""</span> + mon.attack());</span><br><span class="line"> </span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="comment">// base class</span></span><br><span class="line"> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">string</span> <span class="title">attack</span>(<span class="params"></span>)</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="comment">// derivated class </span></span><br><span class="line"></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Slime</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">override</span> <span class="keyword">string</span> <span class="title">attack</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"小怪物正在攻擊"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="2"><li>問題:為什麼要在基底類別宣告 method 而不是直接在衍生類別撰寫方法?</li></ol><p>如果先在基底類別宣告方法的時候,就可以使用基底類別建立的身分呼叫方法。但是如果沒有在基底類別宣告這個方法,就不能使用此種方式。換句話說, 透過使用 abstract method,就可以讓衍生類別具有共同行為,但是實際的做法則由各個類別自訂。這種宣告方式同時可以用基底類別的身分取得衍生類別的行為。</p><ol start="3"><li>abstract method 必須放在 abstract class 中,abstract class 是一種不能實體化 (不能被 new) 的 class。原因就在於 abstract method 並沒有定義內容,因此若被實體化出來,就無法執行任何動作。</li></ol><p><img src="https://i.imgur.com/nQksmFu.png" alt></p>]]></content>
<summary type="html">
<p>一個 method 的組成包含:</p>
<ol>
<li>宣告</li>
<li>內容 (實際執行方式)</li>
</ol>
<h1 id="abstract-method"><a href="#abstract-method" class="headerlink" t
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - Constant 常數</title>
<link href="http://yoursite.com/2020/10/14/2020-10-14-02/"/>
<id>http://yoursite.com/2020/10/14/2020-10-14-02/</id>
<published>2020-10-13T16:00:00.000Z</published>
<updated>2020-10-27T05:18:58.135Z</updated>
<content type="html"><![CDATA[<ol><li>常數是一種永存於程式中的定值,不會隨著程式的進行而被修改</li><li>C# 中有兩種宣告常數的方式,分別是「const」與「readonly」,分別都是加在變數型別前面 </li><li>「const」的常數不能同時是 static。</li></ol><p>下面的例子是以 const 設定不可修改的 PI 值</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Math</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">const</span> <span class="keyword">double</span> PI = <span class="number">3.14</span>;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p><img src="https://i.imgur.com/ghg6nmu.png" alt> </p><ol start="4"><li>readonly 也可使用 static</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Math</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="keyword">double</span> PI = <span class="number">3.14</span>;</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><ol start="5"><li>「readonly」不能在 method 中使用</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Math</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">meow</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"></span><br><span class="line"> <span class="keyword">const</span> <span class="keyword">int</span> a = <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p><img src="https://i.imgur.com/pIj0i4s.png" alt></p><ol start="6"><li>若在自行撰寫的函式庫內使用到的話,要注意「const」的常數會在編譯時期將所有使用到的地方替換為實際的數值,「readonly」則是在實際執行期間才會去查找。簡單的定義如下:</li></ol><p>readonly 為執行階段常數<br>public static readonly int Start = 0;</p><p>const 為編譯時期常數<br>public const int End = 10;</p><h1 id="差異"><a href="#差異" class="headerlink" title="差異"></a>差異</h1><p>差異:<br>1.const 僅能用於數字和字串,而 readonly 可以是任意型態。<br>2.const 能在方法中使用,readonly 不行。(常數不應該是宣告在方法裡)<br>3.const 是在編譯時期產生的,readonly 是在運行時產生的</p><p>若今天你改了 const 的參數值,很直覺的我只修改了常數並編譯成 dll,然後將 dll 發佈(將 dll 檔案 copy 到.exe 相對應資料夾),然後直接執行.exe,會發現你的參數值還是舊的! 必須重新編譯你的 exe 專案才會更新。</p>]]></content>
<summary type="html">
<ol>
<li>常數是一種永存於程式中的定值,不會隨著程式的進行而被修改</li>
<li>C# 中有兩種宣告常數的方式,分別是「const」與「readonly」,分別都是加在變數型別前面 </li>
<li>「const」的常數不能同時是 static。</li>
</ol
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - switch 與 enum</title>
<link href="http://yoursite.com/2020/10/14/2020-10-27/"/>
<id>http://yoursite.com/2020/10/14/2020-10-27/</id>
<published>2020-10-13T16:00:00.000Z</published>
<updated>2020-10-27T12:09:09.679Z</updated>
<content type="html"><![CDATA[<p>當我們想判斷某些變數的值來決定要做甚麼事情時就常會用到 switch</p><p>enum 則可以幫助我們定義新的型別並且賦予其有限的值 switch 跟 enum 兩者間常常會一起出現</p><ol><li>switch 可以判斷某個變數的值為何,並根據值的內容來做出對應的反應。其語法如下</li></ol> <figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">Move</span>(<span class="params">Direction direction</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">switch</span> (direction)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">case</span> Direction.UP:</span><br><span class="line"> Y += <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> Direction.DOWN:</span><br><span class="line"> Y -= <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> Direction.LEFT:</span><br><span class="line"> X -= <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="keyword">case</span> Direction.RIGHT:</span><br><span class="line"> X += <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">break</span>;</span><br><span class="line"> <span class="comment">/*</span></span><br><span class="line"><span class="comment"> default:</span></span><br><span class="line"><span class="comment"> 若上面狀況都不符合的話,要做的事情</span></span><br><span class="line"><span class="comment"> break;</span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="2"><li>enum 可以用來創造新的型別,並且可以被放入數個定義的數值。<figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">enum</span> Direction</span><br><span class="line"> {</span><br><span class="line"> UP, DOWN, LEFT, RIGHT</span><br><span class="line"> }</span><br></pre></td></tr></table></figure></li></ol>]]></content>
<summary type="html">
<p>當我們想判斷某些變數的值來決定要做甚麼事情時就常會用到 switch</p>
<p>enum 則可以幫助我們定義新的型別並且賦予其有限的值 switch 跟 enum 兩者間常常會一起出現</p>
<ol>
<li>switch 可以判斷某個變數的值為何,並根據值的內容來做
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - base 關鍵字</title>
<link href="http://yoursite.com/2020/10/13/2020-10-13/"/>
<id>http://yoursite.com/2020/10/13/2020-10-13/</id>
<published>2020-10-12T16:00:00.000Z</published>
<updated>2020-10-14T05:39:19.361Z</updated>
<content type="html"><![CDATA[<ol><li>使用 this 關鍵字能存取所屬物件的屬性與方法(指向該物件本身),常用在 method 參數名稱與屬性名稱重複的時候。base 關鍵字也是類似原理,只是 base 存取的對象是基底類別</li></ol><p>[問題]<br>繼承的變數與方法若是 public 或 protected 不是本來就可以直接存取嗎?</p><h1 id="情境一:用-base-存取基底類別的變數"><a href="#情境一:用-base-存取基底類別的變數" class="headerlink" title="情境一:用 base 存取基底類別的變數"></a>情境一:用 base 存取基底類別的變數</h1><p>第一種可能使用 base 的狀況,是當衍生類別裡面出現名稱相同的屬性,蛋想要存取的是基底類別而不是衍生類別的屬性,就可以使用 base 來存取。</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//base class</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//private int hp = 100;</span></span><br><span class="line"> <span class="keyword">protected</span> <span class="keyword">int</span> hp = <span class="number">100</span>;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getHp</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"><span class="comment">//derivated class</span></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Slim</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> hp;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Slim</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp = <span class="number">500</span>;</span><br><span class="line"> <span class="keyword">base</span>.hp = <span class="number">2345</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">say</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> introduceSelf()+<span class="string">"I am slim"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="情境二:用-base-存取基底類別的方法"><a href="#情境二:用-base-存取基底類別的方法" class="headerlink" title="情境二:用 base 存取基底類別的方法"></a>情境二:用 base 存取基底類別的方法</h1><p>基底類別的method已被衍生類別override,若想存取原版 (原本在基底類別內的版本) 的 method,就可以用 base</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//base</span></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keyword">string</span> <span class="title">introduceSelf</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"I am monster"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"><span class="comment">//derivated</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Slim</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">override</span> <span class="keyword">string</span> <span class="title">introduceSelf</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="keyword">base</span>.introduceSelf()+<span class="string">"I am slim"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="用-base-存取基底類別的建構子"><a href="#用-base-存取基底類別的建構子" class="headerlink" title="用 base 存取基底類別的建構子"></a>用 base 存取基底類別的建構子</h1><p>想要呼叫基底類別的建構子 (constructor) 時,可以在自己的建構子後加上 base 來呼叫。呼叫基底類別建構子的程式碼,只能寫在繼承類別的建構子後面</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//base</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">string</span> name;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Monster</span>(<span class="params"><span class="keyword">string</span> name</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"><span class="comment">//derivated</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Slim</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Slim</span>(<span class="params"><span class="keyword">string</span> name</span>):<span class="title">base</span>(<span class="params">name</span>) </span></span><br><span class="line"><span class="function"> </span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp = <span class="number">500</span>;</span><br><span class="line"> <span class="keyword">base</span>.hp = <span class="number">2345</span>;</span><br><span class="line"> }</span><br><span class="line"> } </span><br><span class="line"></span><br><span class="line"><span class="comment">//derivated 提供給基底類別建構子的參數不一定要來自於變數</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Slim</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Slim</span>(<span class="params"></span>):<span class="title">base</span>(<span class="params"><span class="string">"dididada"</span></span>) </span></span><br><span class="line"><span class="function"> </span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp = <span class="number">500</span>;</span><br><span class="line"> <span class="keyword">base</span>.hp = <span class="number">2345</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ol>
<li>使用 this 關鍵字能存取所屬物件的屬性與方法(指向該物件本身),常用在 method 參數名稱與屬性名稱重複的時候。base 關鍵字也是類似原理,只是 base 存取的對象是基底類別</li>
</ol>
<p>[問題]<br>繼承的變數與方法若是 publ
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - protected</title>
<link href="http://yoursite.com/2020/10/12/2020-10-12-01/"/>
<id>http://yoursite.com/2020/10/12/2020-10-12-01/</id>
<published>2020-10-11T16:00:00.000Z</published>
<updated>2020-10-12T08:17:19.930Z</updated>
<content type="html"><![CDATA[<ol><li>只有該 class 的區塊才能存取 private 的資源,就算是衍生的類別也算是外部</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//base class</span></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> hp = <span class="number">100</span>;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getHp</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p><img src="https://i.imgur.com/vogefW9.png" alt></p><h1 id="protected-關鍵字"><a href="#protected-關鍵字" class="headerlink" title="protected 關鍵字"></a>protected 關鍵字</h1><p>用來控管不想讓外部隨意使用,但又想讓繼承的 class 內能存取的資源</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br></pre></td><td class="code"><pre><span class="line"> <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Monster mon = <span class="keyword">new</span> Monster();</span><br><span class="line"> Slim slim = <span class="keyword">new</span> Slim();</span><br><span class="line"> MessageBox.Show(<span class="string">""</span>+slim.say());</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="comment">//base class</span></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"> <span class="comment">//private int hp = 100;</span></span><br><span class="line"> <span class="keyword">protected</span> <span class="keyword">int</span> hp = <span class="number">100</span>;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">getHp</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">protected</span> <span class="keyword">string</span> <span class="title">introduceSelf</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"I am monster"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"><span class="comment">//derivated class</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Slim</span>:<span class="title">Monster</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Slim</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp = <span class="number">500</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">say</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"I am slim"</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">say</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> introduceSelf()+<span class="string">"I am slim"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="開放程度"><a href="#開放程度" class="headerlink" title="開放程度"></a>開放程度</h1><p><em>public > protected > private</em></p>]]></content>
<summary type="html">
<ol>
<li>只有該 class 的區塊才能存取 private 的資源,就算是衍生的類別也算是外部</li>
</ol>
<figure class="highlight csharp"><table><tr><td class="gutter"><pre><span cl
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 產生亂數</title>
<link href="http://yoursite.com/2020/10/11/2020-10-11-01/"/>
<id>http://yoursite.com/2020/10/11/2020-10-11-01/</id>
<published>2020-10-10T16:00:00.000Z</published>
<updated>2020-10-12T08:02:32.019Z</updated>
<content type="html"><![CDATA[<ol><li>產生亂數的話,可以使用 C# 內建的 Random 物件</li><li>Random Class 的主要功能就是產生亂數,主要的 method 就是 Next( ),Next( ) 有三種版本:<br>(1) int Next( )<br>沒有參數的版本<br>產生的亂數介於 0 到整數最大值之間 (0~2147483647)</li></ol><p>(2) int Next(int maxValue)<br>參數為上限<br>產生的亂數介於 0 到 maxValue 之間 (不含 maxValue)</p><p>(3) int Next(int minValue, int maxValue)<br>參數為下限與上限<br>產生的亂數介於 minValue 與 maxValue 之間 (含 minValue 但不含 maxValue)</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">int</span> power = <span class="number">100</span>;</span><br><span class="line"> Random random = <span class="keyword">new</span> Random();</span><br><span class="line"> <span class="comment">//int injured = random.Next()%power;</span></span><br><span class="line"> <span class="comment">//int injured = random.Next(power);</span></span><br><span class="line"> <span class="keyword">int</span> injured = random.Next(power/<span class="number">2</span>,power);</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(<span class="string">"我受到傷害"</span> + injured + <span class="string">"點"</span>);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ol>
<li>產生亂數的話,可以使用 C# 內建的 Random 物件</li>
<li>Random Class 的主要功能就是產生亂數,主要的 method 就是 Next( ),Next( ) 有三種版本:<br>(1) int Next( )<br>沒有參數的版本<b
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 繼承性</title>
<link href="http://yoursite.com/2020/10/10/2020-10-10-01/"/>
<id>http://yoursite.com/2020/10/10/2020-10-10-01/</id>
<published>2020-10-09T16:00:00.000Z</published>
<updated>2020-10-10T09:51:50.407Z</updated>
<content type="html"><![CDATA[<h1 id="繼承性-Inheritance"><a href="#繼承性-Inheritance" class="headerlink" title="繼承性 (Inheritance)"></a>繼承性 (Inheritance)</h1><ol><li>要使用繼承,需要在定義 class 的時候,在 class 名稱後面加上「:]與被繼承的 class 名稱</li></ol><p>例如要使 class A 繼承 class B</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">A</span>:<span class="title">B</span>{</span><br><span class="line"> ....</span><br><span class="line">}</span><br></pre></td></tr></table></figure><ol start="2"><li>可讓物件繼承其他物件具有的屬性與行為。 成員被繼承的類別稱為「基底類別」(Base Class),而繼承這種成員的類別即稱為「衍生類別」(Derived Class)。 衍生類別只能有一個基底類別。透過繼承把多個 Class 重複的程式碼寫在同一個 Class 以減少「Class 之間」的重複程式碼</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 基底類別</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> hp=<span class="number">100</span>;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">GetHP</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">injured</span>(<span class="params"><span class="keyword">int</span> injurePoint</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp -= injurePoint;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//衍生類別</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Monster</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">Attack</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//衍生類別</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Villager</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> String <span class="title">Talk</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"You jump I jump"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Villager vi = <span class="keyword">new</span> Villager();</span><br><span class="line"> Monster mon = <span class="keyword">new</span> Monster();</span><br><span class="line"> vi.injured(mon.Attack());</span><br><span class="line"> MessageBox.Show(<span class="string">""</span> + vi.GetHP());</span><br><span class="line"> MessageBox.Show(<span class="string">""</span> + mon.GetHP());</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="3"><li><p>繼承是可轉移的。如果 ClassC 衍生自 ClassB ,且 ClassB 衍生自 ClassA,則 ClassC 繼承 ClassB、ClassA 的成員</p></li><li><p>也可以利用繼承減少「Class 內部」的重複程式碼。<br>例如:如果要讓怪物攻擊不同的生物,像是村民或雞,可能就要替不同生物撰寫不同版本的 Attack:</p></li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">Attack</span>(<span class="params">Villager villager</span>)</span> {</span><br><span class="line"> ....</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">Attack</span>(<span class="params">Monster monster</span>)</span> {</span><br><span class="line"> ....</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>但因為 Villager 與 Monster 都繼承自 Creature,所以可以這樣寫</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">int</span> hp=<span class="number">100</span>;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">int</span> <span class="title">GetHP</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">injured</span>(<span class="params"><span class="keyword">int</span> injurePoint</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> hp -= injurePoint;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Monster</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">Attack</span>(<span class="params">Creature c</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> c.injured(<span class="number">10</span>);</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Villager</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> String <span class="title">Talk</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"You jump I jump"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Villager vi = <span class="keyword">new</span> Villager();</span><br><span class="line"> Monster mon = <span class="keyword">new</span> Monster();</span><br><span class="line"> Monster mon2 = <span class="keyword">new</span> Monster();</span><br><span class="line"> <span class="comment">//vi.injured(mon.Attack());</span></span><br><span class="line"> mon.Attack(vi);</span><br><span class="line"> mon.Attack(mon2);</span><br><span class="line"> MessageBox.Show(<span class="string">"村民"</span> + vi.GetHP());</span><br><span class="line"> MessageBox.Show(<span class="string">"怪1"</span> + mon.GetHP());</span><br><span class="line"> MessageBox.Show(<span class="string">"怪2"</span> + mon2.GetHP());</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>只要是 Creature 或是它的衍生類別,都可以被傳入 Attack 處理<br>這樣就可以大大減少 Class 內部的重複程式碼</p>]]></content>
<summary type="html">
<h1 id="繼承性-Inheritance"><a href="#繼承性-Inheritance" class="headerlink" title="繼承性 (Inheritance)"></a>繼承性 (Inheritance)</h1><ol>
<li>要使用繼承,需要
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - Override 覆寫</title>
<link href="http://yoursite.com/2020/10/10/2020-10-10-02/"/>
<id>http://yoursite.com/2020/10/10/2020-10-10-02/</id>
<published>2020-10-09T16:00:00.000Z</published>
<updated>2020-10-12T05:38:09.910Z</updated>
<content type="html"><![CDATA[<p>讓你改寫繼承到的行為</p><ul><li>在原本被改寫的 method 前加上 virtual</li><li>在改寫的 methods 加上 override</li><li>override 的 method 其名稱與參數型別都要跟被 overrid</li></ul><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//要覆寫的基底類別</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">string</span> name;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keyword">string</span> <span class="title">attack</span>(<span class="params">Creature target</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"攻擊了"</span> + target.name;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>繼承基底類別原有的行為,但是使用 override 改寫內容</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Villager</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Villager</span>(<span class="params"><span class="keyword">string</span> name</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">override</span> <span class="keyword">string</span> <span class="title">attack</span>(<span class="params">Creature target</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"不能攻擊其他人"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>問題:<br>寫新的 method 也能做到想覆寫的新行為</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//要覆寫的基底類別</span></span><br><span class="line"><span class="keyword">class</span> <span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">string</span> name;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keyword">string</span> <span class="title">attack</span>(<span class="params">Creature target</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"攻擊了"</span> + target.name;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>像這樣</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Monster</span>:<span class="title">Creature</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="title">Monster</span>(<span class="params">String name</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">this</span>.name = name;</span><br><span class="line"> }</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">move2</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"橫著走"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Player p = <span class="keyword">new</span> Player(<span class="string">"阿勇"</span>);</span><br><span class="line"> Monster m = <span class="keyword">new</span> Monster(<span class="string">"Slim"</span>);</span><br><span class="line"> Villager v = <span class="keyword">new</span> Villager(<span class="string">"歐比屎"</span>);</span><br><span class="line"> <span class="keyword">string</span> message = m.move2();</span><br><span class="line"> MessageBox.Show(message);</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>那為什麼需要 override? 使用 override 的好處是即使不用衍生類別呼叫新的 method 行為而用基底類別的身分呼叫新的 method 行為,也能呼叫到。</p><p><strong>可以使用 Base Class 的變數存取繼承 class 的物件</strong></p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Player p = <span class="keyword">new</span> Player(<span class="string">"阿勇"</span>);</span><br><span class="line"> Monster m = <span class="keyword">new</span> Monster(<span class="string">"Slim"</span>);</span><br><span class="line"> Villager v = <span class="keyword">new</span> Villager(<span class="string">"歐比"</span>);</span><br><span class="line"> Creature c = m;</span><br><span class="line"> <span class="keyword">string</span> message = c.move();</span><br><span class="line"> MessageBox.Show(message);</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p>雖然以新寫新 method 也能做到想覆寫的新行為,但只能在原有的變數底下呼叫</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">Monster m = <span class="keyword">new</span> Monster(<span class="string">"Slim"</span>);</span><br><span class="line"> <span class="keyword">string</span> message = m.move2();</span><br></pre></td></tr></table></figure><p>沒有使用 override 就不能以 base class 的身分呼叫</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">move2</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"橫著走"</span>;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p><img src="https://i.imgur.com/ZA7BQd9.png" alt></p><h1 id="Override-amp-Method-Hiding"><a href="#Override-amp-Method-Hiding" class="headerlink" title="Override & Method Hiding"></a>Override & Method Hiding</h1><ol><li>當繼承的類別之中有著與基底類別 (父類別) 名稱和參數相同的 method,但沒有加上 override 的字樣,就會觸發 method hiding (方法遮蔽) 的機制。</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> Fruit f = <span class="keyword">new</span> Apple();</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(f.saySomething());</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Fruit</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keyword">string</span> <span class="title">saySomething</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我是一個水果"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Apple</span>:<span class="title">Fruit</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">saySomething</span>(<span class="params"></span>) <span class="comment">// 沒有override 關鍵字</span></span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我是一個ringo"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="2"><li><p>Method hiding (方法遮蔽) 指的是繼承的類別將原本基底類別的 method 隱藏起來了,但是與 override 不同,新的 method 會與舊的 method 共存,而且都可以被呼叫得到。<br><img src="https://i.imgur.com/ur8B44O.png" alt></p></li><li><p>如果想要呼叫到被隱藏起來的 method,<strong>就必須要用該 method 所屬的 class 變數來呼叫</strong>。舉例說 class Orange 遮蔽了 class Fruit 裡面的 saySomething。如果想要呼叫到 class Orange 物件中繼承到原本 A 版本的 saySomething ,就要用 Fruit 型別的變數去存取 Orange 的物件</p></li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"> <span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">button1_Click</span>(<span class="params"><span class="keyword">object</span> sender, EventArgs e</span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="comment">//Orange o = new Orange();</span></span><br><span class="line"> Fruit o = <span class="keyword">new</span> Orange(); <span class="comment">// 用fruit 型別的變數去存取 Orange 的物件</span></span><br><span class="line"> MessageBox.Show(o.saySomething());</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="comment">// 衍生類別</span></span><br><span class="line"> <span class="keyword">class</span> <span class="title">Orange</span>:<span class="title">Fruit</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">saySomething</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我是一個煩人柳丁"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"><span class="comment">// 基底類別</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">class</span> <span class="title">Fruit</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">virtual</span> <span class="keyword">string</span> <span class="title">saySomething</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我是一個水果"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="4"><li>加上 new 關鍵字使用方法遮蔽<br>為了防止跟 override 混淆,想要使用方法遮蔽時可以在 method 前面加上「new」來加以區分。</li></ol><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title">Orange</span>:<span class="title">Fruit</span></span><br><span class="line"> {</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">string</span> <span class="title">saySomething</span>(<span class="params"></span>)</span></span><br><span class="line"><span class="function"></span> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我是一個煩人柳丁"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<p>讓你改寫繼承到的行為</p>
<ul>
<li>在原本被改寫的 method 前加上 virtual</li>
<li>在改寫的 methods 加上 override</li>
<li>override 的 method 其名稱與參數型別都要跟被 overrid</li>
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - Get and Set 存取器</title>
<link href="http://yoursite.com/2020/10/09/2020-10-09/"/>
<id>http://yoursite.com/2020/10/09/2020-10-09/</id>
<published>2020-10-08T16:00:00.000Z</published>
<updated>2020-10-09T08:47:39.742Z</updated>
<content type="html"><![CDATA[<h1 id="語法"><a href="#語法" class="headerlink" title="語法"></a>語法</h1><p>……… // 宣告變數(通常是 public)<br>{ get { …. } // 希望變數讀取時執行的程式碼<br> set { …. } // 希望數值存入時執行的程式碼<br>}</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> private string Username;</span><br><span class="line"> private string Password;</span><br><span class="line"> private int hp;</span><br><span class="line"> public int HP</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">get</span> { <span class="keyword">return</span> hp; }<span class="comment">//在讀取 HP 時會自動呼叫</span></span><br><span class="line"> <span class="keyword">set</span> { <span class="keyword">if</span> (value < <span class="number">0</span>) {<span class="comment">//在存入數值時自動呼叫</span></span><br><span class="line"> hp = <span class="number">0</span>;</span><br><span class="line"> } <span class="keyword">else</span> {</span><br><span class="line"> hp = value;</span><br><span class="line"> } }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public <span class="keyword">void</span> hurt(int decreaseHP)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (hp >= decreaseHP)</span><br><span class="line"> {</span><br><span class="line"> hp -= decreaseHP;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> hp = <span class="number">0</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> public int getHP()</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> hp;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public User(string Username, string Password)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">this</span>.Username = Username;</span><br><span class="line"> <span class="keyword">this</span>.Password = Password;</span><br><span class="line"> <span class="keyword">this</span>.hp = <span class="number">30</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> User user = <span class="keyword">new</span> User(<span class="string">"Tum"</span>,<span class="string">"1234"</span>);</span><br><span class="line"> MessageBox.Show(<span class="string">""</span>+user.HP); }</span><br></pre></td></tr></table></figure><p>如果只留下 get 存取器,該變數就會變成「唯讀」</p><p><img src="https://i.imgur.com/RzeJFse.png" alt></p><p>Get & Set 存取器可以用來即時運算一些平常大家認為是變數的數值,像是 Money</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> </span><br><span class="line"> private int count1, count5, count10;</span><br><span class="line"> public int Money</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">get</span> { <span class="keyword">return</span> count1 + count5 * <span class="number">5</span> + count10 * <span class="number">10</span>; }</span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> public User(string Username, string Password)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">this</span>.Username = Username;</span><br><span class="line"> <span class="keyword">this</span>.Password = Password;</span><br><span class="line"> <span class="keyword">this</span>.hp = <span class="number">30</span>;</span><br><span class="line"> <span class="keyword">this</span>.count1 = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">this</span>.count5 = <span class="number">1</span>;</span><br><span class="line"> <span class="keyword">this</span>.count10 = <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> User user = <span class="keyword">new</span> User(<span class="string">"Tum"</span>,<span class="string">"1234"</span>);</span><br><span class="line"> </span><br><span class="line"> MessageBox.Show(<span class="string">""</span>+user.Money); }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<h1 id="語法"><a href="#語法" class="headerlink" title="語法"></a>語法</h1><p>……… // 宣告變數(通常是 public)<br>{
get { …. } // 希望變數讀取時執行的程式碼<br> s
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 垃圾回收</title>
<link href="http://yoursite.com/2020/10/08/2020-10-08-01/"/>
<id>http://yoursite.com/2020/10/08/2020-10-08-01/</id>
<published>2020-10-07T16:00:00.000Z</published>
<updated>2020-10-08T06:00:42.579Z</updated>
<content type="html"><![CDATA[<ol><li>存放物件位置的變數稱為 reference, 當我們宣告物件的變數時,只是產生一個用來記住物件地址的 reference 而已<br><code>Info a = new Info()</code></li><li>物件的實際本體位置是在電腦的記憶體中有一塊稱為 Heap 的空間。</li><li>執行 new(),電腦才會在 Heap 產生物件</li><li>當一個物件沒有任何 reference 指向(儲存物件的地址)他的時候,就會被判定為不需要的物件</li><li>C# 的程式執行時,背後有一個垃圾車會默默地檢查 Heap ,並刪除不需要的物件</li></ol>]]></content>
<summary type="html">
<ol>
<li>存放物件位置的變數稱為 reference, 當我們宣告物件的變數時,只是產生一個用來記住物件地址的 reference 而已<br><code>Info a = new Info()</code></li>
<li>物件的實際本體位置是在電腦的記憶體中有一塊稱
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 封裝性</title>
<link href="http://yoursite.com/2020/10/08/2020-10-08-02/"/>
<id>http://yoursite.com/2020/10/08/2020-10-08-02/</id>
<published>2020-10-07T16:00:00.000Z</published>
<updated>2020-10-10T07:40:03.165Z</updated>
<content type="html"><![CDATA[<ol><li>public 在新增 property 與 method 的時候,代表可以隨意查看、使用及修改。類型或成員可由相同元件中的任何其他程式碼或參考它的另一個元件來存取。</li><li>private 在 c# 裡面代表只有自己可以查看、使用及修改</li><li>proptery 被設為 private,能在同一個 class 的大括號範圍內使用。如果有變數或方法,只想在 class 裡面使用,就用 private 鎖在 class 裡面,限定只有 class 使用</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public string Username;<span class="comment">//程式裡任何地方都可使用</span></span><br><span class="line"> private string Password;<span class="comment">//只能在大括號內使用</span></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><p><img src="https://i.imgur.com/5fwuDze.png" alt></p><p>如果在同一個 scope 裡面就可以隨意存取</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public string Username;<span class="comment">//程式裡任何地方都可使用</span></span><br><span class="line"> private string Password;<span class="comment">//只能在大括號內使用</span></span><br><span class="line"></span><br><span class="line"> public <span class="keyword">void</span> reset()</span><br><span class="line"> {</span><br><span class="line"> Password = <span class="string">""</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="Private-的常見用途"><a href="#Private-的常見用途" class="headerlink" title="Private 的常見用途"></a>Private 的常見用途</h1><ul><li>情境一:密碼保護<br>有些 Property 想要隱藏起來,不想讓 class 外的東西能夠隨意存取,例如密碼。<br>此時如果有比對密碼的必要,就可以寫一個 public 的 method 間接存取</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public string Username;</span><br><span class="line"> private string Password;</span><br><span class="line"> public User(string Username, string Password)<span class="comment">//利用建構子在建立物件時同時設初始值</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">this</span>.Username = Username;</span><br><span class="line"> <span class="keyword">this</span>.Password = Password;</span><br><span class="line"> }</span><br><span class="line"> public bool comparePassword(string targetPassword)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (<span class="keyword">this</span>.Password == targetPassword)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> private <span class="keyword">void</span> reset()</span><br><span class="line"> {</span><br><span class="line"> Password = <span class="string">""</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> User user = <span class="keyword">new</span> User(<span class="string">"Tum"</span>,<span class="string">"1234"</span>);</span><br><span class="line"> string result = <span class="string">""</span>;</span><br><span class="line"> <span class="keyword">if</span> (user.comparePassword(<span class="string">"1234"</span>))</span><br><span class="line"></span><br><span class="line"> result = <span class="string">"密碼正確"</span>;</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> result = <span class="string">"密碼錯誤"</span>;</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(result);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="Property-只想設成唯讀,就是只能看,不能夠修改"><a href="#Property-只想設成唯讀,就是只能看,不能夠修改" class="headerlink" title="Property 只想設成唯讀,就是只能看,不能夠修改"></a>Property 只想設成唯讀,就是只能看,不能夠修改</h1><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> private string Username;<span class="comment">//程式裡任何地方都可使用</span></span><br><span class="line"> private string Password;<span class="comment">//只能在大括號內使用</span></span><br><span class="line"> public User(string Username, string Password)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">this</span>.Username = Username;</span><br><span class="line"> <span class="keyword">this</span>.Password = Password;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public string getUsername()</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> Username;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> User user = <span class="keyword">new</span> User(<span class="string">"Tum"</span>,<span class="string">"1234"</span>);</span><br><span class="line"> MessageBox.Show(user.getUsername());</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="property-的設定上增加一些限制"><a href="#property-的設定上增加一些限制" class="headerlink" title="property 的設定上增加一些限制"></a>property 的設定上增加一些限制</h1><p>例如遊戲時要限定條件限制,血量不能變負數。設定一個 method 判斷 HP 不能等於負數。再用另一個 method 取得 private 的 HP 內容</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">User</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> private string Username;<span class="regexp">/</span></span><br><span class="line"><span class="regexp"> private string Password;</span></span><br><span class="line"><span class="regexp"> private int HP;</span></span><br><span class="line"><span class="regexp"> public User(string Username, string Password)</span></span><br><span class="line"><span class="regexp"> {</span></span><br><span class="line"><span class="regexp"> this.Username = Username;</span></span><br><span class="line"><span class="regexp"> this.Password = Password;</span></span><br><span class="line"><span class="regexp"> this.HP = 30;</span></span><br><span class="line"><span class="regexp"> }</span></span><br><span class="line"><span class="regexp"></span></span><br><span class="line"><span class="regexp"></span></span><br><span class="line"><span class="regexp"> public void hurt(int decreaseHP)</span></span><br><span class="line"><span class="regexp"> {</span></span><br><span class="line"><span class="regexp"> if(HP>=decreaseHP)</span></span><br><span class="line"><span class="regexp"> {</span></span><br><span class="line"><span class="regexp"> HP -= decreaseHP;</span></span><br><span class="line"><span class="regexp"> }</span></span><br><span class="line"><span class="regexp"> else</span></span><br><span class="line"><span class="regexp"> {</span></span><br><span class="line"><span class="regexp"> HP = 0;</span></span><br><span class="line"><span class="regexp"> }</span></span><br><span class="line"><span class="regexp"> }</span></span><br><span class="line"><span class="regexp"> public int getHP()</span></span><br><span class="line"><span class="regexp"> {</span></span><br><span class="line"><span class="regexp"> return HP;</span></span><br><span class="line"><span class="regexp"> }</span></span><br><span class="line"><span class="regexp"> }</span></span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> User user = <span class="keyword">new</span> User(<span class="string">"Tum"</span>,<span class="string">"1234"</span>);</span><br><span class="line"> user.hurt(<span class="number">10</span>);</span><br><span class="line"> user.hurt(<span class="number">10</span>);</span><br><span class="line"> user.hurt(<span class="number">10</span>);</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(<span class="string">""</span>+user.getHP()); }</span><br></pre></td></tr></table></figure><h1 id="封裝性-encapsulated"><a href="#封裝性-encapsulated" class="headerlink" title="封裝性 encapsulated"></a>封裝性 encapsulated</h1><ol><li>隱藏物件內部的實作細節,不需要知道內部的運作方式。只提供介面以供使用。可以保護物件內的變數</li></ol><h2 id="緊密封裝-tightly-encapsulated"><a href="#緊密封裝-tightly-encapsulated" class="headerlink" title="緊密封裝 tightly encapsulated"></a>緊密封裝 tightly encapsulated</h2><p>把物件裡面所有變數設成 private,只提供 public method 供操作</p>]]></content>
<summary type="html">
<ol>
<li>public 在新增 property 與 method 的時候,代表可以隨意查看、使用及修改。類型或成員可由相同元件中的任何其他程式碼或參考它的另一個元件來存取。</li>
<li>private 在 c# 裡面代表只有自己可以查看、使用及修改</li>
<l
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 陣列</title>
<link href="http://yoursite.com/2020/10/07/2020-10-07/"/>
<id>http://yoursite.com/2020/10/07/2020-10-07/</id>
<published>2020-10-06T16:00:00.000Z</published>
<updated>2020-10-08T03:13:04.977Z</updated>
<content type="html"><![CDATA[<p>陣列可以存放類型相同的大量資料,例如 100 個整數等</p><h1 id="陣列宣告方法"><a href="#陣列宣告方法" class="headerlink" title="陣列宣告方法"></a>陣列宣告方法</h1><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">int[] scores = <span class="keyword">new</span> int[]{<span class="number">92</span>,<span class="number">83</span>,<span class="number">100</span>}</span><br></pre></td></tr></table></figure><h2 id="存取陣列資料"><a href="#存取陣列資料" class="headerlink" title="存取陣列資料"></a>存取陣列資料</h2><p>要存取陣列內的資料,需要打「陣列名稱[編號]」,如果要存取陣列編號3的資料:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">scores[<span class="number">3</span>] = <span class="number">100</span>;<span class="comment">//在編號3的位置存入100</span></span><br></pre></td></tr></table></figure><h2 id="陣列編號"><a href="#陣列編號" class="headerlink" title="陣列編號"></a>陣列編號</h2><p>陣列編號索引是從 0 開始算起,如果陣列長度是 40,<br>索引是從 0~39</p><h2 id="陣列預設值"><a href="#陣列預設值" class="headerlink" title="陣列預設值"></a>陣列預設值</h2><p>假使指定陣列長度但還沒存放資料,陣列會先將每個位置都填上預設值。</p><p>int 預設值 0<br>double 預設值 0.0<br>bool 預設值 false</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">int[] scores = new int [40];</span><br><span class="line">messageBobx.show(""+scores[0])//顯示0</span><br></pre></td></tr></table></figure><h2 id="使用範圍外的索引值"><a href="#使用範圍外的索引值" class="headerlink" title="使用範圍外的索引值"></a>使用範圍外的索引值</h2><p>如果沒有預先指定陣列長度,但使用了大於目前陣列內容長度的索引,「只有在程式執行時才會報錯」</p><p><img src="https://i.imgur.com/2xvWFUT.png" alt></p><h2 id="存取物件"><a href="#存取物件" class="headerlink" title="存取物件"></a>存取物件</h2><p>. 除了 int, double 這些基本型別,也可以建立物件陣列。只需要將型別名稱替換成 class 名稱即可,例如要宣告大小 20 的 Student class 的陣列可以寫:</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">Student[] scores = <span class="keyword">new</span> Student[<span class="number">10</span>];</span><br><span class="line">scores[<span class="number">0</span>]=<span class="keyword">new</span> Student(<span class="number">0</span>,<span class="string">'Sam'</span>);</span><br><span class="line">scores[<span class="number">1</span>]=<span class="keyword">new</span> Student(<span class="number">1</span>,<span class="string">'Tim'</span>);</span><br><span class="line">scores[<span class="number">2</span>]=<span class="keyword">new</span> Student(<span class="number">2</span>,<span class="string">'Liam'</span>);</span><br></pre></td></tr></table></figure><ol start="8"><li><p>陣列的大小是固定的,在宣告的時候就要決定</p></li><li><p>陣列也是一種物件</p></li></ol>]]></content>
<summary type="html">
<p>陣列可以存放類型相同的大量資料,例如 100 個整數等</p>
<h1 id="陣列宣告方法"><a href="#陣列宣告方法" class="headerlink" title="陣列宣告方法"></a>陣列宣告方法</h1><figure class="highlig
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - This</title>
<link href="http://yoursite.com/2020/10/01/2020-10-01/"/>
<id>http://yoursite.com/2020/10/01/2020-10-01/</id>
<published>2020-09-30T16:00:00.000Z</published>
<updated>2020-10-08T03:13:13.305Z</updated>
<content type="html"><![CDATA[<ol><li>「this」即這個物件的</li><li>this 是一種 reference type 的變數,是一個指向自己物件的物件變數</li><li>this 這個變數會隨物件建立的時候就宣告</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public int Grade;</span><br><span class="line"> public int height;</span><br><span class="line"> public Student(int studentID, string name, int grade,int height)</span><br><span class="line"> {</span><br><span class="line"> StudentID = studentID;</span><br><span class="line"> Name = name;</span><br><span class="line"> Grade = grade;</span><br><span class="line"> <span class="keyword">this</span>.height = height; <span class="comment">// this.height => 這個物件的 height</span></span><br><span class="line"> }</span><br><span class="line"> </span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ol>
<li>「this」即這個物件的</li>
<li>this 是一種 reference type 的變數,是一個指向自己物件的物件變數</li>
<li>this 這個變數會隨物件建立的時候就宣告</li>
</ol>
<figure class="highlight
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 建構子</title>
<link href="http://yoursite.com/2020/09/30/2020-09-30-2/"/>
<id>http://yoursite.com/2020/09/30/2020-09-30-2/</id>
<published>2020-09-29T16:00:00.000Z</published>
<updated>2020-09-30T10:15:58.999Z</updated>
<content type="html"><![CDATA[<p>問題:</p><ol><li>建構物件要寫多行程式碼</li><li>重複設定同樣的數值</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> Student s1 = <span class="keyword">new</span> Student();</span><br><span class="line"> s1.Name = <span class="string">"小山"</span>;</span><br><span class="line"> s1.Grade = <span class="number">3</span>;</span><br><span class="line"></span><br><span class="line"> Student s2 = s1;</span><br><span class="line"> s2.Name = <span class="string">"小羊"</span>;</span><br><span class="line"> s2.Grade = <span class="number">2</span>;</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="Constructor"><a href="#Constructor" class="headerlink" title="Constructor"></a>Constructor</h1><ul><li>Method 的一種</li><li>物件被建立的時候執行</li><li>沒有 output</li><li>名稱與 class 名稱相同</li><li>如果知道某個屬性的初始值為多少,可寫在建構子內,讓物件預先設定好</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"></span><br><span class="line"> public int Grade;</span><br><span class="line"></span><br><span class="line"> public Student()<span class="comment">//建構子</span></span><br><span class="line"> {</span><br><span class="line"> Grade = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ul><li>建構子可以給予 input(引數、輸入值)用來幫助設定物件</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"></span><br><span class="line"> public int Grade;</span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public Student()<span class="comment">//建構子</span></span><br><span class="line"> {</span><br><span class="line"> Grade = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ul><li>建構子的 input 要在建立物件時給予</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Student s1 = <span class="keyword">new</span> Student(<span class="number">10201</span>,<span class="string">"zzz"</span>);</span><br></pre></td></tr></table></figure><ul><li>Overloaded 多載<br>不同情況需要不同建構子。可以使用物件導向的其中一個特徵「多載」。</li></ul><p>可寫兩個名稱一樣的建構子,但是接受不同數量的 input</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> Student s1 = <span class="keyword">new</span> Student(<span class="number">10201</span>,<span class="string">"aa"</span>);</span><br><span class="line"> Student s2 = <span class="keyword">new</span> Student(<span class="number">10202</span>, <span class="string">"bb"</span>);</span><br><span class="line"> Student s3 = <span class="keyword">new</span> Student(<span class="number">10202</span>, <span class="string">"正正"</span>,<span class="number">3</span>);</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public int Grade;</span><br><span class="line"> public Student(int studentID, string name, int grade)</span><br><span class="line"> {</span><br><span class="line"> StudentID = studentID;</span><br><span class="line"> Name = name;</span><br><span class="line"> Grade = grade;</span><br><span class="line"> }</span><br><span class="line"> public Student(int studentID, string name)</span><br><span class="line"> {</span><br><span class="line"> StudentID = studentID;</span><br><span class="line"> Name = name;</span><br><span class="line"> Grade = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ul><li>有建構子就不能使用系統預設建構子</li></ul><p><img src="https://i.imgur.com/Og7rrpp.png" alt></p>]]></content>
<summary type="html">
<p>問題:</p>
<ol>
<li>建構物件要寫多行程式碼</li>
<li>重複設定同樣的數值</li>
</ol>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - Value 與 Reference Type</title>
<link href="http://yoursite.com/2020/09/30/2020-09-30/"/>
<id>http://yoursite.com/2020/09/30/2020-09-30/</id>
<published>2020-09-29T16:00:00.000Z</published>
<updated>2020-09-30T07:22:44.981Z</updated>
<content type="html"><![CDATA[<ol><li>所有變數都是被存取在記憶體裡面。</li><li>根據存取變數的方式與使用方式不同可分三種型別:</li></ol><ul><li>Value Type 實質型別</li><li>Reference Type 參考型別</li><li>Pointer Type 指標型別</li></ul><h1 id="Value-Type-實質型別"><a href="#Value-Type-實質型別" class="headerlink" title="Value Type 實質型別"></a>Value Type 實質型別</h1><p>int (整數)」就是一種 Value Type。會在記憶體裡佔據一個空間,並且標記為變數名稱,並且把指定的數值存在這個空間裡面。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">int a = <span class="number">10</span></span><br><span class="line">int b = a; <span class="comment">// a =10, b =10</span></span><br><span class="line">b = <span class="number">30</span> <span class="comment">// a=10 ,b = 30</span></span><br></pre></td></tr></table></figure><h1 id="Reference-Type-參考型別"><a href="#Reference-Type-參考型別" class="headerlink" title="Reference Type 參考型別"></a>Reference Type 參考型別</h1><ol><li>Class 是一種 Reference Type,宣告 Reference Type 的變數時,也會在記憶體裡尋找一個空間,標記為變數名稱。</li><li>物件要透過 new() 關鍵字建立,才能讓變數有所參照指向。沒有指向任何物件的變數,初始存放的是 null</li><li>物件是存在稱為「堆疊(Heap)」的特殊記憶體區塊</li><li>若宣告一個 Reference Type 的變數等於另一個Reference Type 的變數,會使得前一個變數參照後一個變數指向的堆疊區塊</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public int Grade;</span><br><span class="line"> public string Say()</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我叫"</span> + Name + <span class="string">", 我是"</span> + Grade + <span class="string">"年級的學生"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> Student s1 = <span class="keyword">new</span> Student();</span><br><span class="line"> s1.Name = <span class="string">"小山"</span>;</span><br><span class="line"> s1.Grade = <span class="number">3</span>;</span><br><span class="line"></span><br><span class="line"> Student s2 = s1;</span><br><span class="line"> s2.Name = <span class="string">"小羊"</span>;</span><br><span class="line"> s2.Grade = <span class="number">2</span>;</span><br><span class="line"></span><br><span class="line"> Student s4 = s2;</span><br><span class="line"> s4.Name = <span class="string">"元整"</span>;</span><br><span class="line"> s4.Grade = <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(s4.Say()); <span class="comment">//"我叫元整, 我是1年級的學生";</span></span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<ol>
<li>所有變數都是被存取在記憶體裡面。</li>
<li>根據存取變數的方式與使用方式不同可分三種型別:</li>
</ol>
<ul>
<li>Value Type 實質型別</li>
<li>Reference Type 參考型別</li>
<li>Pointer
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 物件導向基礎 Class</title>
<link href="http://yoursite.com/2020/09/27/2020-09-27/"/>
<id>http://yoursite.com/2020/09/27/2020-09-27/</id>
<published>2020-09-26T16:00:00.000Z</published>
<updated>2020-10-02T05:24:08.582Z</updated>
<content type="html"><![CDATA[<ol><li>物件導向即透過物件互動來完成工作</li><li>Class 分成屬性(property)與方法(method)兩部分<ul><li>class Student</li><li>property: Student ID, Name, Grade</li><li>Method:Say,Walk….</li></ul></li><li>Class 像一個設計圖,根據設計圖可以用此建立不同的物件<br><img src="https://i.imgur.com/lWLtMfe.png" alt></li><li>Class 裡面的 property 跟 method 要 public 才能被外部 method 取用在建立物件</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"></span>{</span><br><span class="line"> <span class="comment">//property</span></span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public int Grade;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><ol start="5"><li>method 格式:</li></ol><p>`public 輸出的型別 method 名稱(輸入型別與名稱)</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> <span class="comment">//method;</span></span><br><span class="line"> public string Say()</span><br><span class="line"> {</span><br><span class="line"> <span class="comment">// method 的內容</span></span><br><span class="line"> <span class="keyword">return</span> <span class="string">"我叫"</span> + Name + <span class="string">", 我是"</span> + Grade + <span class="string">"年級的學生"</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="6"><li>要使用物件,必須使用 class 的變數存取並且用關鍵字 <code>new()</code> 宣告才會真正建立物件</li><li>如果沒有輸出值,就要用 void 代替輸出值</li><li>如果要取得輸入值,必須用類似宣告變數的方式宣告輸入值,例如 talk 這個 method 有 2 個輸入值,字串 sname 與數字 sgrade ,那就要打成 p…. talk(string sname, int sgrade) { 定義 method }</li><li>將資料包裝成物件可以幫助重複使用資料</li><li>將物件傳入其他物件的 method 中使用就是一種「物件互動」的方式</li></ol><h1 id="範例"><a href="#範例" class="headerlink" title="範例"></a>範例</h1><ul><li>建立一個車子的 Class,並且新增兩個 method,分別叫做 speedUp 與 crash。</li><li>把車子剛建立時的速度設為 0,並建立兩輛車子 A, B</li><li>假設 A, B 這兩輛車子相向而行,如果呼叫 speedUp() 就會加速(Ex: +10 km/hr)。</li><li>然後 crash 接受一個輸入值,代表被撞的車</li><li>呼叫 crash 就會輸出字串「XX 車撞上 YY 車」</li><li>模擬 A 車以 100 km/hr 的速度撞上 B 車</li></ul><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// class</span></span><br><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Motor</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public string color;</span><br><span class="line"> public string name;</span><br><span class="line"> public int speed;</span><br><span class="line"></span><br><span class="line"> public string Run()</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> color + <span class="string">"的"</span>+name+<span class="string">"車子正以時速,"</span> + speed + <span class="string">"前進"</span>;</span><br><span class="line"></span><br><span class="line"> }</span><br><span class="line">public <span class="keyword">void</span> speedUp()</span><br><span class="line"> {</span><br><span class="line"> speed += <span class="number">10</span>;</span><br><span class="line"> }</span><br><span class="line"> public string crash(Motor b)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> name + <span class="string">"車以"</span> + speed + <span class="string">"km/hr速度撞上了"</span> + b.name + <span class="string">"車"</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> Motor a = <span class="keyword">new</span> Motor();</span><br><span class="line"> a.name = <span class="string">"Benz"</span>;</span><br><span class="line"> a.color = <span class="string">"藍色"</span>;</span><br><span class="line"> a.speed = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"> Motor b = <span class="keyword">new</span> Motor();</span><br><span class="line"> b.name = <span class="string">"福斯"</span>;</span><br><span class="line"> b.color = <span class="string">"紅色"</span>;</span><br><span class="line"> b.speed = <span class="number">50</span>;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">for</span>(int i = <span class="number">0</span>; i < <span class="number">10</span>; i++)</span><br><span class="line"> {</span><br><span class="line"> a.speedUp();</span><br><span class="line"> MessageBox.Show(a.Run()+<span class="string">"而且加速中當"</span>+b.Run());</span><br><span class="line"> <span class="keyword">if</span> (a.speed == <span class="number">100</span>)</span><br><span class="line"> {</span><br><span class="line"> MessageBox.Show(a.crash(b));</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="static-修飾字"><a href="#static-修飾字" class="headerlink" title="static 修飾字"></a>static 修飾字</h1><ol><li>在「類別」內宣告的變數(即屬性)前面加上 static,這個變數在類別內就變成靜態變數</li><li>靜態變數必須在方法外面宣告</li><li>靜態變數離開方法後,變數值不會被釋放掉。下次再呼叫此方法時,保留的變數值仍可繼續使用,所以變數的生命週期是直到程式停止執行為止</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Test</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public <span class="keyword">static</span> int max(int a, int b)</span><br><span class="line"> {</span><br><span class="line"> int result;</span><br><span class="line"> <span class="keyword">if</span> (a < b)</span><br><span class="line"> {</span><br><span class="line"> result = b;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> result = a;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">return</span> result;</span><br><span class="line"> }</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">int a = <span class="number">10</span>;</span><br><span class="line">int b = <span class="number">20</span>;</span><br><span class="line">int c = Test.max(a,b);</span><br></pre></td></tr></table></figure><ol start="4"><li>程式執行的時候由於物件屬性是被放在 Heap 區,靜態變數被放在全域變數區,因此物件屬性必須建立物件實體才能使用,但是靜態變數不必建立物件實體就能存取,而且允許多個物件共用一份靜態變數。</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">class</span> <span class="title">Student</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> public int StudentID;</span><br><span class="line"> public string Name;</span><br><span class="line"> public int Grade;</span><br><span class="line"> public int Score;</span><br><span class="line"> public <span class="keyword">static</span> int PassScore = <span class="number">60</span>;</span><br><span class="line"></span><br><span class="line"> public Student(int studentID, string name)</span><br><span class="line"> {</span><br><span class="line"> StudentID = studentID;</span><br><span class="line"> Name = name;</span><br><span class="line"> Grade = <span class="number">1</span>;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public Student(int studentID, string name,int grade)</span><br><span class="line"> {</span><br><span class="line"> StudentID = studentID;</span><br><span class="line"> Name = name;</span><br><span class="line"> Grade = grade;</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> public bool isPass()</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">if</span> (Score >= PassScore)</span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line"> }</span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> {</span><br><span class="line"> <span class="keyword">return</span> <span class="literal">false</span>;</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> }</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> Student s1 = <span class="keyword">new</span> Student(<span class="number">10201</span>,<span class="string">"小吧"</span>);</span><br><span class="line"> Student s2 = <span class="keyword">new</span> Student(<span class="number">10202</span>, <span class="string">"小楊"</span>,<span class="number">3</span>);</span><br><span class="line"> s1.Score = <span class="number">20</span>;</span><br><span class="line"> s2.Score = <span class="number">80</span>;</span><br><span class="line"> Student.PassScore = <span class="number">20</span>;</span><br><span class="line"></span><br><span class="line"> MessageBox.Show(<span class="string">"我是"</span>+s1.Name+<span class="string">"我的成績是否通過"</span>+s1.isPass());</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol start="3"><li>static class(靜態類別) 不可以用來建立物件。不可使用 new 關鍵字建立物件。例如以下的 Math 是存放數學運算式</li></ol><p><img src="https://i.imgur.com/7xwAuE0.png" alt></p>]]></content>
<summary type="html">
<ol>
<li>物件導向即透過物件互動來完成工作</li>
<li>Class 分成屬性(property)與方法(method)兩部分<ul>
<li>class Student</li>
<li>property: Student ID, Name, Grade</li>
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 變數宣告意義與型別</title>
<link href="http://yoursite.com/2020/09/26/2020-09-26-2/"/>
<id>http://yoursite.com/2020/09/26/2020-09-26-2/</id>
<published>2020-09-25T16:00:00.000Z</published>
<updated>2020-09-28T05:35:20.186Z</updated>
<content type="html"><![CDATA[<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> int number ;</span><br><span class="line"> number = <span class="number">20</span>;</span><br><span class="line"> double dnumber=<span class="number">3.141989030</span>;</span><br><span class="line"> bool b = <span class="literal">true</span>;</span><br><span class="line"> MessageBox.Show(<span class="string">"number = "</span>+ number);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><h1 id="變數宣告意義"><a href="#變數宣告意義" class="headerlink" title="變數宣告意義"></a>變數宣告意義</h1><ol><li><p>所有變數在使用前都必須先宣告型別,目的是讓電腦先知道變數的「型別」是什麼。先告知電腦到底我們要給這個變數多少記憶體空間(從 type 判斷)以及它的名稱是甚麼</p></li><li><p><code>=</code>不是等於,而是「指定」特定的儲存值給變數,「指定」代表的意思其實就是把「右邊的值存入左邊的變數」裡的意思。真正的「相等」是使用「==」這個符號。</p></li><li><p>使用變數前,一定要先存入某個數值,否則無法編譯</p></li><li><p>變數的作用域(生命週期)叫 Scope,只要超出變數的 scope 就無法使用他。變數只在大括號包起來的範圍內才有效。而在大括號外面使用變數就會無法呼叫到它。</p></li><li><p>變數名稱是不可以重複的,不過如果你在一個變數的 scope 外宣告了一樣名稱的變數,那就不會互相影響。例如,你在 void button1_Click() 裡面宣告了 num,跟在 void button2_Click() 裡面宣告了 num,這樣就不會互相衝突。</p></li></ol><h1 id="數值型別"><a href="#數值型別" class="headerlink" title="數值型別"></a>數值型別</h1><ol><li><code>int</code> 代表「整數(integer)」,例如 10,100,-999</li><li>int 只能儲存有限大小的數字,每個 int 的變數可以分配到 32 bits(4 bytes) 的記憶體空間。</li><li>想要儲存小數可以使用 float 或 double</li><li>C# 會預先將所有數字當成 double 來處理</li></ol><h1 id="bool"><a href="#bool" class="headerlink" title="bool"></a>bool</h1><ol><li>bool 只能儲存「true」、「false」兩種資料,這種數值通常用來儲存判斷式的結果</li></ol><h1 id="string"><a href="#string" class="headerlink" title="string"></a>string</h1><ol><li>常用變數型別,儲存文字類型的值。</li><li>不像 int, double ,bool 等型別儲存使用的記憶體空間是固定的。string 型別若儲存的文字內容越多,佔用的空間越大。</li><li>string 也可用加法連接字串或其他型別的內容,其他不是字串的值會被先轉成字串再相連</li></ol><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"> string str = <span class="string">"我是姍姍"</span>;</span><br><span class="line"> string str2 = <span class="string">"哈哈"</span>;</span><br><span class="line"> int number = <span class="number">54321</span>;</span><br><span class="line"> string str3 = str + str2;</span><br><span class="line"> str += str2;</span><br><span class="line"> MessageBox.Show(str3+number);</span><br><span class="line"> MessageBox.Show(str);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 程式結構與進入點</title>
<link href="http://yoursite.com/2020/09/26/2020-09-26-1/"/>
<id>http://yoursite.com/2020/09/26/2020-09-26-1/</id>
<published>2020-09-25T16:00:00.000Z</published>
<updated>2020-09-26T08:03:17.130Z</updated>
<content type="html"><![CDATA[<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">using System;</span><br><span class="line"></span><br><span class="line">namespace HelloWorld</span><br><span class="line">{</span><br><span class="line"> <span class="class"><span class="keyword">class</span> <span class="title">Program</span></span></span><br><span class="line"><span class="class"> </span>{</span><br><span class="line"> <span class="keyword">static</span> <span class="keyword">void</span> Main(string[] args)</span><br><span class="line"> {</span><br><span class="line"> Console.WriteLine(<span class="string">"Hello World!"</span>);</span><br><span class="line"> Console.ReadKey();</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><ol><li><p>C# 程式碼大致可分 2 個區塊<br>(1) using 部分是呼叫內建的程式庫<br>(2) 主要區塊是自行編寫程式邏輯的地方</p></li><li><p>用大括號包起來的程式碼屬於同一個區塊,屬於上方的程式碼所有</p></li><li><p>上方的 HelloWorld 程式分三層<br>(1)namespace 可提供自行在內編寫程式庫<br>(2)class 負責 namespace 裡面某部分工作<br>(3)method 是class裡面負責更細部工作的,它後面跟著一個小括號,例如:<code>void Main(string[] args)</code><br>(4)static void Main(string[] args)是程式的「(entry point)」,所有 C#程式都會從這個 method 開始執行<br>(5)Console.WriteLine 是會在終端機上顯示文字的method,Console.ReadKey 會先暫停程式執行,等待使用者輸入任一字元後再繼續執行程式<br>(6)每行程式碼結尾都要加上 <code>;</code></p></li></ol>]]></content>
<summary type="html">
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
<entry>
<title>C# - 基本計算</title>
<link href="http://yoursite.com/2020/09/26/2020-09-26-3/"/>
<id>http://yoursite.com/2020/09/26/2020-09-26-3/</id>
<published>2020-09-25T16:00:00.000Z</published>
<updated>2020-09-26T08:45:35.493Z</updated>
<content type="html"><![CDATA[<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">private <span class="keyword">void</span> button1_Click(object sender, EventArgs e)</span><br><span class="line"> {</span><br><span class="line"></span><br><span class="line"> int number =<span class="number">20</span> ;</span><br><span class="line"> number +=<span class="number">30</span> ;</span><br><span class="line"> number = number - <span class="number">1</span>;</span><br><span class="line"> number--;</span><br><span class="line"> MessageBox.Show(<span class="string">"number = "</span>+ number);</span><br><span class="line"> }</span><br></pre></td></tr></table></figure><ol><li><p>如果你試圖要將小數存入 int(整數) 變數裡面,C# 會自動省略小數點之後,只留下整數的部分存進變數裡面</p></li><li><p>除法要是遇到無法整除的情形,它仍會計算到小數點後</p></li><li><p><code>int a; a = 30 / 8;</code></p><p>最後 a 裡面只會存入 3 而已,因為 a 是整數變數</p></li><li><p>取得餘數用 % 符號</p></li><li><p>number = number + 8 可簡化為 number +=8</p></li><li><p>單純「遞增 1」或「遞減 1 」的計算,可以使用</p></li></ol><p>number++;<br>number–; 7. C# 一看到運算子,就會依照他的計算邏輯把運算子左右兩邊的值抓出來做計算。那麼為了要使結果正確,並且有規則可循。每個運算子都有優先的順序。我們熟悉的「先乘除、後加減」也是 C# 使用運算子的優先順序之一,所以它就會先計算「* / %」的結果,再去計算「+ -」的結果。</p>]]></content>
<summary type="html">
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span
</summary>
<category term="C#" scheme="http://yoursite.com/tags/C/"/>
</entry>
</feed>