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