C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题
一、簡答題
1.簡述C#中的所有訪問修飾符及訪問權限
private(私有的)
給類,及所有類成員使用
所有類成員的默認訪問修飾符
可訪問范圍
當前類自身
public(公開的)
給類,及所有類成員使用
可訪問范圍
當前類自身
所有的子類
同一程序集其他類通過實例化也可以訪問
其他程序集中的類也可以實例化訪問
protected(受保護的)
類,內嵌類的所有成員
類的默認訪問修飾符
可訪問范圍
當前類自身
所有的子類可以訪問
同一程序集其他類不可以訪問
其他程序集中可以通過繼承也可以訪問
internal
類,內嵌類的所有成員
可訪問范圍
當前類自身
同一程序集的其他類可以通過實例化訪問
同一程序集中的子類也可以訪問
其他程序集中不管是不是子類都無法訪問
internal protected
類,及內嵌類的所有成員
可訪問范圍
當前類自身
同一程序集的其他類可以通過實例化進行訪問
所有子類可以訪問
其他程序集中可以通過繼承進行訪問,但實例化不行
2.簡單介紹方法的重載和重寫
重寫:當一個子類繼承一父類,而子類中的方法與父類中的方法的名稱,參數個數、類型都完全一致時,就稱子類中的這個方法重寫了父類中的方法。
重載:一個類中的方法與另一個方法同名,但是參數表不同,這種方法稱之為重載方法。
3.方法中的ref參數和out、參數的用法是什么
①、ref的使用:使用ref進行參數的傳遞時,該參數在創建時,必須設置其初始值,且ref側重于修改;
②、out的使用:采用out參數傳遞時,該參數在創建時,可以不設置初始值,但是在方法中必須初始化,out側重于輸出;
ref是有進有出,而out是只出不進。
4.簡單介紹數組和集合的區別
①、數組聲明了元素的類型,集合不聲明
②、數組是靜態的,有固定大小,創建了就無法改變容量,而集合是動態擴展容量,可以根據需要改變大小.
③、數組存放類型只能是一種,集合可以不是一種
5.簡單介紹C#類中的兩個特殊函數
構造函數
構造函數又叫構造方法,它是一種特殊的成員函數,它主要用于為對象分配存儲空間,對數據成員進行初始化(對類進行初始化)。
如果類中沒有聲明構造函數,那么系統會自動生成一個構造函數,如果聲明了構造函數,那么系統將不會再理會,構造函數可以重載
析構函數
析構函數是實現銷毀一個類的實例的方法成員。析構函數不能有參數,當類生成的對象被釋放時自動生成的函數
6.簡單介紹static靜態的用法、特性
用法:
①、Static可以修飾類,使類成為靜態類。這樣在此類中只能定義靜態的方法和靜態的變量。
②、static可以修飾變量,這個變量只能是成員變量,不能是局部的。
既不能修飾方法體中的變量,以及形式參數。
③、static可以修飾方法,Main方法必須用static修飾,因為它是與程序共存亡的,是程序的入口和結束的大門。
特性:
①、只會在編譯時分配空間,程序真正執行時,是不會重新分配空間的.
②、值能變,但是其指向地址不會變
③、用static聲明了的變量不會被GC(辣雞回收機制)所回收. 所以使用時需要注意.
7.C#中的委托是什么?事件是不是委托?
委托是一種在對象里保存方法引用的類型,同時也是一種類型安全的函數指針。把一個方法作為參數帶入另一個方法
事件是一種特殊的委托。
8.C#中類(class)與結構(struct)的異同
①、值類型與引用類型
結構Struct是值類型:值類型在堆棧上分配地址,所有的基類型都是結構類型,例如:int 對應System.int32 結構,string 對應 system.string 結構 ,通過使用結構可以創建更多的值類型。
類Class是引用類型:引用類型在堆上分配地址。
結構是值類型所以結構之間的賦值可以創建新的結構,而類是引用類型,類之間的賦值只是復制引用。
②、繼承性
結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed .
類:完全可擴展的,除非顯示的聲明sealed 否則類可以繼承其他類和接口,自身也能被繼承
③、內部結構:
結構:
沒有默認的構造函數,但是可以添加構造函數
沒有析構函數
沒有 abstract 和 sealed(因為不能繼承)
不能有protected 修飾符
可以不使用new 初始化
類:
有默認的構造函數
有析構函數
可以使用 abstract 和 sealed
有protected 修飾符
必須使用new 初始化
同:
①、雖然結構與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object
②、雖然結構的初始化也使用了New 操作符可是結構對象依然分配在堆棧上而不是堆上,
9.介紹C#的String和StringBuilder的用法
string是個基礎類型,每次賦值都會重新分配內存空間,string是對System.String命名空間起的一個名字。String類有不可改變性,每次執行字符操作時,都會創建一個新的String對象。
StringBuilder:使用前先進行實例化,支持空參數構造,在對象實例化后就不再重新分配內存。StringBuilder是由Char數組構成的。構建新的StringBuilder時能設置容量大小,當添加字符串,超過已分配的數組大小時,就會創建一個新的數組,此時容量會翻倍,舊空間自動銷毀。
10.抽象和虛擬的區別 【virtual(虛擬函數)、abstract(抽象函數)】
①、virtual修飾的方法必須有實現,而abstract修飾的方法一定不能實現。
②、virtual可以被子類重寫,而abstract必須被子類重寫。
③、如果類成員被abstract修飾,則該類前必須添加abstract,因為只有抽象類才可以有抽象方法。
④、無法創建abstract類的實例,只能被繼承無法實例化,比如: BaseTest2 base2 = new BaseTest2();將出現編譯錯誤:抽象類或接口不能創建實例。
⑤、C#中如果要在子類中重寫方法,必須在父類方法前加virtual,在子類方法前添加override,這樣就避免了程序員在子類中不小心重寫了父類方法。
⑥、abstract方法必須重寫,virtual方法必須有實現
11.C#中的接口和類有什么異同?
不同點:
不能直接實例化接口。
接口不包含方法的實現。
接口可以多繼承,類只能單繼承。
類定義可以在不同的源文件之間進行拆分。
相同點:
接口、類和結構都可以從多個接口繼承。
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口和類都可以包含事件、索引器、屬性。
12.進程和線程的區別是什么?
①、線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
②、不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
③、進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源.
④、在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。
13.請詳述C#中的繼承問題
①、子承父業:
子類會繼承父類的屬性,構造,行為
②、父親具有的,兒子不一定具有,子類具有的,父類也不一定具有
當父類只有帶參構造,子類自動會要有帶參構造
③、C#不支持多重繼承,但是可以多重接口繼承
④、關鍵字this:當前類自己,base:代表當前類的親父類
⑤、實例化過程(對象創建過程,先調用的最終父類的構造函數然后依次往下調用當前類)
⑥、析構過程(對象銷毀的過程,從自己開始銷毀直到最終父類)
14.簡單介紹break,continue,return的區別
return:跳出當前循環,直到代碼塊結束
break:只跳出當前循環,執行代碼之后的代碼
continue:只跳出當前本次循環,執行下一次循環
15.簡單描述Socket通信TCP協議的三次握手的作用
三次握手的目的在于驗證服務器瀏覽器之間兩者的收,發功能是否正常。
①、保證客戶端能夠具有發送數據的能力
②、保證服務端能接收到數據,保證服務端能夠發送數據的能力
③、保證客戶端能夠接收到數據
16.按照步驟敘述建立Socket通信的服務端,客戶端的步驟
服務器端:
第一步:創建一個用于監聽連接的Socket對像;
第二步:用指定的端口號和服務器的ip建立一個EndPoint對像;
第三步:用socket對像的Bind()方法綁定EndPoint;
第四步:用socket對像的Listen()方法開始監聽;
第五步:接收到客戶端的連接,用socket對像的Accept()方法創建一個新的用于和客戶端進行通信的socket對像;
第六步:通信結束后一定記得關閉socket;
客戶端:
第一步:建立一個Socket對像;
第二步:用指定的端口號和服務器的ip建立一個EndPoint對像;
第三步:用socket對像的Connect()方法以上面建立的EndPoint對像做為參數,向服務器發出連接請求;
第四步:如果連接成功,就用socket對像的Send()方法向服務器發送信息;
第五步:用socket對像的Receive()方法接受服務器發來的信息 ;
第六步:通信結束后一定記得關閉socket;
二、算法
1.使用遞歸算法計算斐波那契數列
2.在1-20這20個數中求出7個不重復的隨機數
————————————————
總結
以上是生活随笔為你收集整理的C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 声卡突然听不到监听_音乐人/键盘手伴侣物
- 下一篇: 增长量计算n+1原则_事业单位行测:巧解