關於「屬性」的幾個問題,也許面試會問到哦

2021-09-23 21:06:44 字數 2201 閱讀 5590

這些天太忙了都沒更新部落格了,這篇我們繼續聊聊「屬性」,大家都知道,屬性其實分兩種,無參屬性和有參屬性,顧名思義

無參屬性就是我們平時用到的 「屬性」,有參屬性就是我們所說的 「索引器」,

1     public class bird

2

4 5 public string this[int i] set }

6 }

乍一看這兩個還是蠻像的,本質上來說這兩個都是get***,set***方法,只是編譯器為了提高我們的開發效率而做的語法糖。

好,下面回答幾個小問題,當然是我自己的個人見解。

q:為什麼型別中要存在屬性?

a:被錯誤的修改,就會導致類的破壞,所以建議在字段中加一層殼,由屬性來提供高層訪問。

舉個例子:person的age欄位不能設為<0 || >150的非法資料,這個時候我們就可以在屬性的set方法上進行過濾了。

private int age;

public int age

set}

q:  我看到上面欄位age和屬性age,那麼請問自動屬性有封裝欄位嗎,比如下面的**?

1         public int age

2

a:其實這個問題問的好,如果你是平時用用而沒有用il看一下的話,可能還真被矇到了,既然說到了il,那就用il看一下。

從il上可以清楚的看到其實編譯器給我們生成了乙個私有的k__backingfield 字段。

q: 提到屬性,我想問一下「型別初始化器」和「建構函式」有什麼區別。

1             var b = new bird ;
a:從il上可以看出,兩個nop之間,我們呼叫了建構函式(ctor),並且先後呼叫了set_name,set_age方法,所以本質上來說,

「型別初始化器」只是乙個語法糖,跟我們手工在建構函式中初始化一樣。

q:我經常看到session["***"],cookie["***"],請問索引器只能用到類的例項上嗎?可不可以

用到型別上?

a:這個問題問的好,其實你可以發現,我們在定義乙個索引器的時候,根本就沒有定義索引器的名字,而是直接用this,重點

就在這裡,我們知道this表示當前例項的上下文,導致我們的只能用到型別的例項上,也就做不了將用到型別上。

q:從上圖中看到索引器本質上是get_item,set_item,但是我如果自己手工定義了乙個

get_item

造成方法名衝突了,這個怎麼辦?

1         public string this[int i]

2

4 set

5 }

public class bird

set

}//重名了,這個怎麼辦?

a:wcf的時候,可能會遇到給方法標記別名的情況,然後我們就用operationcontract給方法換乙個名字,現在估計就有人想到

了我是不是也可以給「索引器」加上別名?確實可以這樣,在這裡我們可以用indexername來完成。

1         [indexername("fly")]

2 public string this[int i]

3

5 set

6 }

然後我們再看看il**,就這樣成功的修改了索引器的方法名。

關於「引數」的幾個問題,也許面試會問到哦

這篇繼續聊聊 引數 的一些話題,我們知道引數大概有 預設引數 可選引數 ref引數 out引數 以及 可變引數 下面提幾個小問題,可能在面試中會被問到。q 請問我按照如下方式傳遞引數的時候,最後的m等於多少?1 static void main string args 27 8static void...

幾個問題,別人問的

udp丟包,丟的是啥?rtp頭?udp頭?資料幀?還是完整包全丟?tcp和udp丟包的區別以及如何通過二進位制資料或者抓包檔案快速區別 udp丟包和tcp丟包的區別啊?udp丟包,丟的是rtp頭?udp頭?udp包?還是資料流?如何判斷丟包是否是由擁塞控制導致?還是包大小導致?udp如何做資料分頁 ...

關於網路的幾個問題

q1 請你分別划划osi的七層網路結構圖,和tcp ip的五層結構圖?1 osi每層功能及特點 a 物理層 為資料鏈路層提供物理連線,在其上序列傳送位元流,即所傳送資料的單位是位元。此外,該層中還具有確定連線裝置的電氣特性和物理特性等功能。b 資料鏈路層 負責在網路節點間的線路上通過檢測 流量控制和...