【入門級】-[資料型態]-修飾詞

2023/03/27閱讀時間約 6 分鐘
由於我們在寫程式時,會去宣告一些變數、常數相關識別詞,並且在class(類別)中會寫一些事情或動作讓程式去運行,然而這個概念就是去定義對於我們所寫的內容,「可以在哪些範圍去做存取用途。」,在開始介紹前先介紹一個小小程式結構概念
程式結構

一、存取修飾詞


這個是在同一專案下,對於namespace(命名空間)、class(類別)、field(欄位)、Method(方法)去做範圍存取的定義,修飾詞內容如下圖:
存取修飾詞
對於protected、internal、protected internal部分使用狀況可能會比較難懂,這邊用圖來表示或許會好懂一些。
protected存取使用
internal存取使用
protected internal存取使用
以上就是存取修飾詞的介紹。
那麼再看一下最上面那個程式結構的例子,大家有注意到嗎!Field(欄位)那邊的宣告,有的沒有加入存取修飾詞,那這樣它存取使用會是在哪兒呢?倘若說有些沒有加入修飾詞的話,在C#中它會有預設修飾詞,如下所示:
在namespace(命名空間) → 預設修飾詞為 public
在Class(類別)      →預設修飾詞為internal
在Field(欄位)宣告     →預設修飾詞為privated

另外還有一個static也是一個修飾詞,有時候會出現
Public static...
Private static...
Static...
這樣的形式,這是用來宣告靜態成員的部分。

二、參數修飾詞

參數修飾詞
很常在撰寫程式時多多少少都會用到傳遞參數的部分,像最上面那個例子
private void talk(ref int dogNum,ref string DogName)
{
...
}
這邊使用的是ref可以將變數名稱的值帶進來,那麼參數out可以把值帶出去,但是要先給予值。
對於傳遞參數部分有三種方法

1. Call By Value(傳值呼叫):

傳遞方會將實際參數複製一份給接收方,複製那份參數就稱為虛擬參數,實際參數和虛擬參數各佔據不同的記憶體位置。Ex:
Private void main()
{
  string DogName = ”吉利”;
  string B = talk(DogName);
  string C = DogName;
}
private void talk(string dogName)
{
  string A = dogName;
  dogName = ”湯姆”;
  return dogName;
}
此時,就可以將GogName的值直接傳進talk方法中,再經過talk方法中的事情後,return回去就又將改變過的值傳回main()裡
A、B、C的結果值分別為:
A:吉利
B:湯姆
C:吉利
說明:
(1) 從main()開始執行,先給予DogName=”吉利”這樣的值後,再執行下一行,什麼樣的值要傳給B呢?

(2) 就跑進talk方法來看,此時會將DogName的值傳進talk方法內。

(3) 那麼我們就看到talk方法,開始執行第一行,A所得到的值就會是「吉利」

(4) 繼續再到下一行,修改dogName的值為「湯姆」後,最後再return回去

(5) 再回到main()中,得知talk(DogName)的結果為「湯姆」,因此B的值就為「湯姆」

(6) 那麼由於此方法是傳值呼叫,因此會佔據不同的記憶體位置,故C的值為「吉利」

2. Call By Reference(參考呼叫):

是傳遞參數記憶體的位置給接收方,由於是同一個記憶體位置,所以變動的會是同一個記憶體位置的值,彼此就會互相影響。Ex:
Private void main()
{
  string DogName = ”吉利”;
  string B = talk(ref DogName);
  string C = DogName;
}
private void talk(ref string dogName)
{
  string A = dogName;
  dogName = ”湯姆”;
  return dogName;
}
此時,就可以將DogName的值直接傳進talk方法中,再經過talk方法中的事情後,return回去就又將改變過的值傳回main()裡。跟上一個差別是它是使用同一個記憶體位置,因此會覆蓋過去。
A、B、C的結果值分別為:
A:吉利
B:湯姆
C:湯姆

3. Output parameter(傳出參數):

實際參數和虛擬參數都是佔用相同記憶體位置,Ex:
Private void main()
{
  string DogName;
  string DogLike;
  string B = talk(out DogName,out DogLike);
  string C = DogName;
  string D = DogLike;
}
private void talk(out string dogName,out string dogLike)
{
  dogName = ”吉利”;
  dogLike = ”骨頭”;
  string msg = dogName + ”愛吃” + dogLike ;
  return msg;
}
此時,在main()中可以不用先設定值,直到進入talk方法中時,再給予值即可,再talk經過一系列過程後,除了可以把參數中的值給帶出去外,還可以把return的值也一併帶出去
B、C、D的結果值分別為:
B:吉利愛吃骨頭
C:吉利
D:骨頭
說明:
(1) 從main()開始執行,先宣告DogName、DogLike,此時可以不用先設定值,接著進入下一行傳什麼值給B呢?

(2) 就進入talk方法來看,這邊有給予dogName、dogLike的值,接著下一行這邊是將字串做串接後再賦予msg值。

(3) 將msg 值return回去

(4) 再看回main()中,此時B接收到的就會是msg的值也就是「吉利愛吃骨頭」,那麼dogName、dogLike的值也會一併傳回去喔!

(5) 接著往下看C、D輸出的值就是C是「吉利」D是「骨頭」

參考內容:
為什麼會看到廣告
橙果杏
橙果杏
Hello~ Welcome to my blog~❤ 這邊會分享我在程式這條道路中的學習與成長, 過程中從而了解自己的不足,再學習。 希望透過分享的方式, 也讓正在學習程式的夥伴們一起學習, 我們一起加油吧~ 「彼此都會成為彼此之間的影響力」(´,,•ω•,,)♡ ❣
留言0
查看全部
發表第一個留言支持創作者!