一些基礎性的問題

2021-09-05 19:37:38 字數 1602 閱讀 9374

以下近日在培訓講座中討論的一些問題,雖然有的很基礎,但留作朋友們參考

1. 如果一定要實現多個可選引數,是否有變通的機制

--實際上換乙個思路來說還是回到了方法過載的情況

void somemethod(double inputs,params int inputs2)

void somemethod(params int inputs2)

2. 列舉中如果設定多個item的值(value)是一樣,居然不報錯?

--這是設計使然,它確實不會幫我們檢查這乙個問題。但不可以設定重複的item,這是肯定的

3. 究竟什麼時候會用到密封方法?

--如果不希望基類的虛方法在派生類的派生類中再次被重寫的話

--而密封類可以阻止其它程式設計師在無意中繼承該類,而且密封類可以起到執行時優化的效果。要注意,密封類中的虛方法會失效,因為它既然無法繼承,就不存在重寫的可能性

4.乙個結構體的記憶體大小是如何確定的?

--clr預設情況下是按照原先c++的做法,取最大的乙個成員的大小,並進行位元組對齊。例如結構體中的最大的成員位元組為8個位元組(如double),那麼假設有5個成員,那麼就是40個位元組。這會有一些記憶體浪費的情況。注意,不是簡單地把各成員的位元組相加,原因在於內部會有乙個所謂位元組對齊(align)的行為。

system.runtime.interopservices.marshal.sizeof  --這個方法可以取得結構體的大小

--這個行為是可以更改的,通過structlayout這個attribute,但並不是那麼容易掌握,除非熟悉指標的操作

5.自定義結構體如何直接通過賦值的方式初始化,而不用new

--目前無解。實際上確實可以不用new建立結構的例項,就可以直接使用結構。

--但直接在宣告結構體變數的時候賦值卻是做不到的。

--注意,結構體不能編寫無引數的預設構造器,但可以編寫其他帶引數的構造器

--結構體的變數不允許直接給預設值,實際上,預設情況下,clr呼叫預設的構造器的時候,會自動地把所有成員設定為其型別的預設值,例如int型別,就是0

6.new關鍵字的問題

--覆蓋掉基類同名成員

--確實可以不加,但會出現警告,語法上並不嚴謹。用了new可以明確告訴編譯器該覆蓋行為

--對同一成員同時使用 new 和 override 是錯誤的做法,因為這兩個修飾符的含義互斥。new 修飾符會用同樣的名稱建立乙個新成員並使原始成員變為隱藏的。override 修飾符會擴充套件繼承成員的實現。

--確實可以對型別也使用new關鍵字,但只能用在巢狀型別中,用於對子型別的隱藏(參考**例子)

7.重申訪問級別的問題(類和類的成員)

public:不受任何限制的訪問

private(注意,類本身沒有該修飾符,但對於類的成員來說private是預設行為)

protected(注意,類本身沒有該修飾符,如果用這個修飾符其實很費解,對於類的成員來說,意味類本身以及派生類能夠使用)

internal(這是型別的預設修飾符)

protected internal(注意,這是"或"的關係,而不是"與"的關係。注意,類本身沒有該修飾符)

--意味著:有三個可能性訪問該成員

1. 類本身

2.派生類

3.內部

C C 基礎性問題 一

1.關於變數的記憶體開闢問題 比如下面的例子 int i 5 這個變數i的空間應該是在棧上,不需要手動釋放 int k new int 5 這個變數k的空間應該是在堆上開闢,不用了的時候需要手動釋放.上面是我對定義乙個整型變數的兩種方式的理解,不知道有沒有錯誤?但是關於struct class 這種...

模糊計算的基礎性概念

模糊集合理論是將經典集合理論模糊化,並引入語言變數和近似推理的模糊邏輯,具有完整的推理體系的一種智慧型技術。在人類的思維當中,有許多的模糊概念,如大,小,冷,熱等。都沒有明確的內涵和外延,只能用模糊集合來描述 但是有的集合有著清晰的外延。例如男人與女人。通常把前者叫做模糊集合,而後者叫做普通集合 或...

CSS的一些基礎樣式,繼承性權重問題

shortcut icon,特指瀏覽器中位址列左側顯示的圖示,一般大小為16x16,字尾名為.icon icon,指的是圖示,格式可為png gif jpeg,尺寸一般為16x16 24x24 36x36等 line height 行高 設定文字間上下距離 height 高度 就是定義乙個層 或某樣...