.NET常见问题汇总
1.簡述 private、 protected、 public、 internal 修飾符的訪問權(quán)限。
答:private 私有,成員只能由定義類型或者任何嵌套類型中的方法使用;
protected 受保護(hù), 成員只能由定義類型、任何嵌套類型或者不管在什么程序集中的派生類型中的方法訪問;
public 公有,成員可在任何程序集中的任何類型的任何方法訪問;
internal 程序集內(nèi)公有,成員可在程序集內(nèi)的任何方法中訪問。
2.一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34......? 求第30位數(shù)是多少,用遞歸算法實(shí)現(xiàn)。
答:
1 static Int32 GetRecursionValue(Int32 num) 2 { 3 if (num <= 0) 4 { 5 return 0; 6 } 7 else if (num > 0 && num <= 2) 8 { 9 return 1; 10 } 11 else 12 { 13 return GetRecursionValue(num - 1) + GetRecursionValue(num - 2); 14 } 15 }3.C#中的委托是什么?事件是不是一種委托?
答: 委托是一種特殊的數(shù)據(jù)類型,它指向方法,可以看做是指向方法的指針,通過委托可以把方法作為參數(shù)來進(jìn)行傳遞;
事件是一種特殊的委托。
4.override與重載的區(qū)別
答:override是重寫,重寫只存在與類和父類中,重寫是實(shí)現(xiàn)對父類方法的重新實(shí)現(xiàn);重載存在于一個類中,一般用于在一個類中實(shí)現(xiàn)若干重載的方法,這些方法的名稱相同而參數(shù)形式不同。
5.請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty?
答:
1 foreach (var item in this.Controls) 2 { 3 if (item is TextBox) 4 { 5 (item as TextBox).Text = String.Empty; 6 } 7 }6.請編程實(shí)現(xiàn)一個冒泡排序算法?
1 static void sort(Int32[] arrays) 2 { 3 Int32 temp = 0; 4 for (int i = 0; i < arrays.Length; i++) 5 { 6 for (int j = i+1; j < arrays.Length; j++) 7 { 8 if (arrays[j] > arrays[j + 1]) 9 { 10 temp = arrays[j]; 11 arrays[j] = arrays[j + 1]; 12 arrays[j + 1] = temp; 13 } 14 } 15 } 16 }7.描述一下C#中索引器的實(shí)現(xiàn)過程,是否只能根據(jù)數(shù)字進(jìn)行索引?
答:c#中的索引器是有參屬性,屬性的本質(zhì)其實(shí)是方法;不是只能根據(jù)數(shù)字進(jìn)行索引。
8.求以下表達(dá)式的值,寫出您想到的一種或幾種實(shí)現(xiàn)方法: 1-2+3-4+……+m
答:
1 static void Function(Int32 m) 2 { 3 Int32 sum = 0; 4 for (int i = 0; i < m; i++) 5 { 6 if (i % 2 == 0) 7 { 8 sum -= i; 9 } 10 else 11 { 12 sum += i; 13 } 14 } 15 }9.在下面的例子里
using System;class A{public A(){PrintFields();}public virtual void PrintFields(){}}class B:A{int x=1;int y;public B(){y=-1;}public override void PrintFields(){Console.WriteLine("x={0},y={1}",x,y);} View Code當(dāng)使用new B()創(chuàng)建B的實(shí)例時,產(chǎn)生什么輸出?
答:輸出:x=1 y=0;
解析:構(gòu)造B的實(shí)例的時候會先調(diào)用其基類的構(gòu)造函數(shù),此時x=1,y為其默認(rèn)初始值0。
10.什么叫應(yīng)用程序域?
答:應(yīng)用程序域即AppDomain,為了保證代碼的鍵壯性CLR希望不同服務(wù)功能的代碼之間相互隔離,這種隔離可以通過創(chuàng)建多個進(jìn)程來實(shí)現(xiàn),但操作系統(tǒng)中創(chuàng)建進(jìn)程是即耗時又耗費(fèi)資源的一件事,所以在CLR中引入了AppDomain的概念,AppDomain主要是用來實(shí)現(xiàn)同一進(jìn)程中的各AppDomain之間的隔離.
11.CTS、CLS、CLR分別作何解釋?
答:CTS Common type System 通用系統(tǒng)類型; CLS Common Language Specifcation 公共語言規(guī)范;CLR Common Language Runtime 公共語言運(yùn)行時。
12.什么是裝箱和拆箱?
答:值類型轉(zhuǎn)換為引用類型稱為裝箱,引用類型轉(zhuǎn)換為值類型稱之為拆箱。
13.什么是受托管的代碼?
答:受托管的代碼是指運(yùn)行在.NET公共語言運(yùn)行時CLR的代碼,unsafe標(biāo)識非托管代碼,不經(jīng)過CLR運(yùn)行,需要程序員自行分配和釋放內(nèi)存空間。
14.什么是強(qiáng)命名程序集?
答:弱命名和強(qiáng)命名的.net程序集在結(jié)構(gòu)上是一致的,他們都有相同的(PE)格式(PE+)頭,CLR頭,metaData,maniftest和IL,其區(qū)別在于強(qiáng)命名的程序集有發(fā)布者的公鑰和私鑰對。對于弱命名的.net程序集他只能被一個程序調(diào)用,要想使程序集被多個程序共享使用或者是編寫類庫,必須對程序集進(jìn)行強(qiáng)命名。對于一個強(qiáng)命名的程序集,CLR通過下面的信息來唯一的識別它:a.文件名但是不包括擴(kuò)展名;b.版本號Version 如1.02.232.1;c.文化Cultrue如“en-us”;d.公鑰的散列值,PublicKeyToken 如b03f5f7f11d50a3a。在弱命名的情況下,CLR會忽略程序集的版本號,只是當(dāng)需要使用衛(wèi)星程序集的時候使用文化信息,在發(fā)布程序的時候微軟建議使用強(qiáng)命名的程序集,由于公鑰私鑰的存在,這樣做可以有效避免同名同版本同文化的程序集的沖突。
15.在.net中,配件的意思是?
答:是指程序集。
16.在C#中,string str = null 與 string str = “” 請盡量使用文字或圖象說明其中的區(qū)別。
答:str=null是指聲明字符串str,但不給他分配內(nèi)存空間,str=“”,是指聲明字符串str,給它分配長度為""的內(nèi)存空間。
17.請?jiān)斒鲈?net中類(class)與結(jié)構(gòu)(struct)的異同?
答:類是引用類型,可被實(shí)例化,其值分配在堆上,結(jié)構(gòu)體是值類型,其值分配在棧上。
18.分析以下代碼,完成填空
string strTmp = "abcdefg某某某";int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;int j= strTmp.Length; View Code以上代碼執(zhí)行完后,i= j=?
答: i=13,j=10
19.根據(jù)線程安全的相關(guān)知識,分析以下代碼,當(dāng)調(diào)用test方法時i>10時是否會引起死鎖?并簡要說明理由。
public void test(int i) {lock(this){if (i>10){i--;test(i);}} } View Code答:不會發(fā)生死鎖,但有一點(diǎn)int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現(xiàn)死鎖。但如果把int換做一個object,那么死鎖會發(fā)生。
20.公司要求開發(fā)一個繼承System.Windows.Forms.ListView類的組件,要求達(dá)到以下的特殊功能:點(diǎn)擊ListView各列列頭時,能按照點(diǎn)擊列的每行值進(jìn)行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據(jù)您的知識,請簡要談一下您的思路。
答:點(diǎn)擊列頭時獲取該列的列ID,根據(jù)列ID將該列的所有行值重新排序重新綁定值。
21.面向?qū)ο笳Z言的三大特性?
答:封裝、繼承、多態(tài)
22.能用foreach遍歷訪問的對象需要實(shí)現(xiàn)的接口和方法是?
答:實(shí)現(xiàn)IEnumerable接口,實(shí)現(xiàn)GetEnumerator方法.
23.什么是GC,為什么要有GC?
答:GC是垃圾回收器。它對托管堆上的內(nèi)存進(jìn)行管理,實(shí)現(xiàn)垃圾內(nèi)存的回收,程序員不需要關(guān)心內(nèi)存的管理與釋放。
24.Sting s=new String("xyz");,創(chuàng)建了幾個對象?
答;創(chuàng)建兩個對象,一個是對象“xyz”,另一個是指向該對象的對象s.
25.abstract class和interface有什么區(qū)別?
答:abstract class是抽象類,本質(zhì)上還是一個類,interface是接口,是用來實(shí)現(xiàn)的,用來規(guī)范約束實(shí)例的一些行為;
??? 聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類,它用于要創(chuàng)建一個體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)類的情況,也不能實(shí)現(xiàn)抽象類的實(shí)例,然而可以創(chuàng)建一個變量,其類型是一個抽象類,并讓它指向某一個具體的子類的一個實(shí)現(xiàn)。不能有抽象構(gòu)造函數(shù)或者抽象的靜態(tài)方法,抽象類的子類為他們父類中的所用方法提供實(shí)現(xiàn),否則他們也是抽象類,取而代之,在子類中實(shí)現(xiàn)該方法,知道其行為的其他類可以在類中實(shí)現(xiàn)這些方法。
?? 接口是抽象類的變體,在接口中,所用方法都是抽象的,多繼承性可通過實(shí)現(xiàn)這樣的幾口而獲得,接口中所有方法都是抽象的,沒有一個程序體,接口只可以定義static final成員變量,接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時他定義所有這種接口的方法,然后他可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用該接口的方法。
26.啟動一個線程使用Run()還是start()?
答:啟用一個線程用Start()方法.
27.接口是否可以繼承接口?抽象類是否可以實(shí)現(xiàn)接口?抽象類是否可以繼承實(shí)體類?
答:接口可以繼承接口,抽象類可以實(shí)現(xiàn)接口,抽象類可以繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。
28.構(gòu)造函數(shù)是否可以被override?
答:構(gòu)造器不能被繼承,所以不能被override,但是構(gòu)造函數(shù)可以重載。
29.是否可以繼承string類?
答:string 類是密封類,所以不可以被繼承。
30.try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?
?答:finally中的代碼一定會被執(zhí)行,在return之前執(zhí)行。
31.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
答:不對,如果兩個對象值相等,那么它們的hascode一定也相等。
32.數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法?
答:數(shù)組和String都沒有l(wèi)ength()這個方法,它們有Length屬性。
33.sleep() 和 wait() 有什么區(qū)別?
答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€時刻,其它線程可能正在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級(b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?/p>
?????? wait()是線程交互時,如果線程對一個同步對象x 發(fā)出一個wait()調(diào)用,該線程會暫停執(zhí)行,被調(diào)對象進(jìn)入等待狀態(tài),直到被喚醒或等待時間到。
34.進(jìn)程和線程的區(qū)別?
答:進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的單位,線程是CPU調(diào)度和分配的單位,一個進(jìn)程可以有多個線程,這些線程共享這個進(jìn)程的資源。
35.棧和堆的區(qū)別?
答:棧:由編譯器自動分配、釋放,在函數(shù)體中定義的變量即局部變量通常在棧上;堆:一般由程序員分配釋放,new,malloc等內(nèi)存分配函數(shù)分配得到的就是在堆上。
36.產(chǎn)生一個int數(shù)組,長度為100.,并向其中隨機(jī)插入1-100,并且不能重復(fù)。
static Int32[] Function(){Int32[] result = new Int32 [100];ArrayList mylist = new ArrayList();Random random = new Random();while (mylist.Count < 100){Int32 num = random.Next(1,101);if (!mylist.Contains(num)){mylist.Add(num);}}for (int i = 0; i < mylist.Count; i++){result[i] = (Int32)mylist[i];}return result;}37.在c#中using和new這兩個關(guān)鍵字有什么意義,請寫出你所知道的意義?using 指令和語句 new 創(chuàng)建實(shí)例 new 隱藏基類中方法。
答:using可用作引入命名空間或使用非托管資源,使用完對象后自動執(zhí)行實(shí)現(xiàn)了IDisposable接口的Dispose方法;
?????? new 新建實(shí)例或者隱藏父類方法。
38.需要實(shí)現(xiàn)對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保留一個空格,即允許字符串中間有多個空格,但連續(xù)的空格數(shù)不可超過一個。
答:
static String DealStringFun(String sourceStr){String result = sourceStr;result = sourceStr.Trim();result=Regex.Replace(result," *"," ");return result;}39.下面這段代碼輸出什么?為什么?
int i=5;int j=5;if (Object.ReferenceEquals(i,j))Console.WriteLine("Equal");elseConsole.WriteLine("Not Equal"); View Code答:輸出Not Equal,因?yàn)楸容^的是兩個對象,該算法存在裝箱。
40.什么是反射?
答:動態(tài)獲取程序集信息。
41.什么是虛函數(shù),什么是抽象函數(shù)?
答:虛函數(shù):沒有實(shí)現(xiàn)的,可由子類繼承并重寫的函數(shù)。抽象函數(shù):規(guī)定其非虛子類必須實(shí)現(xiàn)的函數(shù),必須重寫。
42.c#中property和attribute的區(qū)別?
答:一個數(shù)屬性,用于存取類的字段,一個是特性,用來標(biāo)識類、方法等得附加性質(zhì)。
43.c#中的三元運(yùn)算符?
答:?:
44.當(dāng)整數(shù)a賦值給一個object對象時,整數(shù)a將會被?
答:值類型轉(zhuǎn)換為引用類型,裝箱。
45.類成員的訪問形式?
答:類內(nèi)部訪問,通過this指針訪問,類外部訪問,通過類實(shí)例來訪問。
46.float f=-123.567F; int i=(int)f;i的值現(xiàn)在是?
答:-123.
47.委托聲明的關(guān)鍵字是?
答:delegate
48.用sealed修飾的類有什么特點(diǎn)?
答:是密封類,不能被繼承。
49.在Asp.net中所有的自定義用戶控件都必須繼承自?
答:control;
50.在.Net中所有可序列化的類都被標(biāo)記為?
答:[serializable]
51.在.net托管代碼中我們不用擔(dān)心內(nèi)存泄漏,這是因?yàn)橛辛?#xff1f;
答:GC垃圾回收器。
52.net錯誤處理機(jī)制是什么?
答:.net錯誤處理機(jī)制采用try-catch-finally結(jié)構(gòu),發(fā)生錯誤時,層層上拋,直到找到匹配的catch為止。
53.&與&&的區(qū)別。
答:&是位運(yùn)算,標(biāo)識按位與,&&是邏輯運(yùn)算符,標(biāo)識邏輯與。
54.Error和Exception有什么區(qū)別?
答:error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。
?
轉(zhuǎn)載于:https://www.cnblogs.com/mohanchen/p/9424650.html
總結(jié)
以上是生活随笔為你收集整理的.NET常见问题汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT 1037 在霍格沃茨找零钱(20
- 下一篇: 图论数学:矩阵树定理