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