- 分析以下代碼
1 string str = "abc123中文漢字"; 2 3 int i = System.Text.Encoding.Default.GetBytes(str).Length; 4 5 int j = str.Length; 6 7 Console.WriteLine(i); 8 9 Console.WriteLine(j);
答案:i=14;i=10;
2.請輸出B.test()的輸出結果
1 class A 2 { 3 int i = 1; 4 public virtual void M1() 5 { 6 Console.WriteLine(" i am A "); 7 } 8 public void M2() 9 { 10 Console.WriteLine(" i ={0} ",i); 11 } 12 } 13 14 class B:A 15 { 16 int i = 2; 17 public override void M1() 18 { 19 Console.WriteLine(" i am B "); 20 } 21 public new void M2() 22 { 23 Console.WriteLine(" i ={0} ", i); 24 } 25 } 26 27 static void Main(string[] args) 28 29 { 30 31 B b = new B(); 32 A a = b; 33 a.M1(); 34 b.M1(); 35 a.M2(); 36 b.M2(); 37 38 }
答案: i am B;
i am B;
1;
2;
3.有序集合seqList{1,1,2,3,5,8,13,21,34.........}請查找集合中第一個大於2147483647的數。
答案:此函數是有名的斐波那契數。實現此函數的方法為
1 //遞歸寫法 2 public int foo(int n) 3 { 4 if(n<2) return 1; 5 else return foo(n-2)+foo(n-1) 6 } 7 8 //循環寫法 9 public int[] foo2(int n) 10 { 11 if(n==1) return new int{1}; 12 else if(n==2) return new int{1,1}; 13 else 14 { 15 int rel[]=new rel[n]; 16 rel[0]=1; 17 rel[1]=1; 18 for(int i=2;i<n;i++) 19 { 20 rel[i]=rel[i-2]+rel[i-1]; 21 } 22 } 23 }
查找大於2147483647的數用二分法查找。
private static int FibonacciSearch(int[] array, int key) { int length = array.Length; int low = 0, high = length - 1, mid, k = 0; mid=(low+high )/2 while(mid<high) { if(array[mid]==key){return mid;break;} else if(array[mid]>key){high=mid;mid=(low+high )/2;} else if(array[mid]<key){low=mid;mid=(low+high )/2;} } }
4.簡述以下詞在C#語言中的作用
volatile:(創建單例模式時會使用,懶漢模式)就像大家更熟悉的const一樣,volatile是一個類型修飾符(type specifier)。它是被設計用來修飾被不同線程訪問和修改的變量。如果不加入volatile,基本上會導致這樣的結果:要么無法編寫多線程程序,要么編譯器失去大量優化的機會。作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.,簡單地說就是防止編譯器對代碼進行優化.比如如下程序:
1
2
3
4
|
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
|
1 //第一種 2 <input id="tea_Name" name="tea.Name" type="text" value="馬老師"/> 3 //第二種 4 @Html.TextBox("tea.Name",Model.tea.Name) 5 //第三種 6 @Html.TextBoxFor(m=>m.tea.Name) 7 //第四種 8 @Html.TextEditorFor(m=>m.tea.Name)
6.用一條SQL語句 查詢出每門功課都大於80分的學生姓名,表結構如下
姓名 | 課程 | 分數 |
張三 | 語文 | 81 |
張三 | 數學 | 75 |
張三 | 英語 | 82 |
李四 | 語文 | 76 |
李四 | 數學 | 90 |
李四 | 英語 | 82 |
王五 | 語文 | 81 |
王五 | 數學 | 100 |
王五 | 英語 | 92 |
答案一:select 姓名 from 表 where 姓名 not in (select 姓名 from 表 where 分數<=80)
答案二(推薦):select 姓名 from 表 group by 姓名 having min(分數)>80
7.簡述Vue中methods、computed以及watch的用法及區別。
1#computed:計算屬性將被混入到 Vue 實例中。所有 getter 和 setter 的 this 上下文自動地綁定為 Vue 實例。
2#methods:methods 將被混入到 Vue 實例中。可以直接通過 VM 實例訪問這些方法,或者在指令表達式中使用。方法中的 this 自動綁定為 Vue 實例。
3#watch:是一種更通用的方式來觀察和響應 Vue 實例上的數據變動。一個對象,鍵是需要觀察的表達式,值是對應回調函數。值也可以是方法名,或者包含選項的對象。Vue 實例將會在實例化時調用 $watch(),遍歷 watch 對象的每一個屬性。
官方API地址:https://cn.vuejs.org/v2/api/#computed
個人博客:https://blog.csdn.net/smartdt/article/details/75557369
8.現有一個業務系統有4萬用戶,所有用戶每天產生6千萬數據,系統要求快速查詢60天數據,請給出你的實現方案。
9.描述你曾經或者正在使用的大型項目解決方案。
10.何時必須聲明一個類為抽象類?
答案:當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。
11.MVC框架中,ActionResult,JsonResult,ContentResult哪個可以return view()?
答案:ActionResult。
12.Aspx頁面中,updatepanel的作用是什么?
答案:UpdatePanel控制頁面的局部更新。(局部更新控件)、
13.MVC框架中,當使用Get方法訪問JsonResult時,能否直接采用以下寫法:return json(obj).為什么?
答案:不能,要使用 res.JsonRequestBehavior = JsonRequestBehavior.AllowGet;//允許使用GET方式獲取,否則用GET獲取是會報錯。
14.可以采用foreach迭代的類的對象必須滿足什么條件?
答案:需要實現IEnumerable接口或聲明GetEnumerator方法的類型。注:不一定要實現IEnumerable接口,但一定要實現GetEnumrator方法。
15.在dotnet環境下,如何把數據庫數據轉換為XML格式輸出?
將數據庫的內容讀取到dataTable或dataSet中,dataTable或dataSet轉為xml。
private string ConvertDataTableToXML(DataTable xmlDS) //DataTable可改用dataset { MemoryStream stream = null; XmlTextWriter writer = null; try { stream = new MemoryStream(); writer = new XmlTextWriter(stream, Encoding.Default); xmlDS.WriteXml(writer); int count = (int)stream.Length; byte[] arr = new byte[count]; stream.Seek(0, SeekOrigin.Begin); stream.Read(arr, 0, count); UTF8Encoding utf = new UTF8Encoding(); return utf.GetString(arr).Trim(); } catch { return String.Empty; } finally { if (writer != null) writer.Close(); } }
16.Html頁面上,有如下代碼<input type="button" name ="btndel" onclick="Del()"/>.現在要求用戶點擊刪除后,彈出刪除確認的對話框,並在點擊確定后彈出對話框“”“刪除完畢”,用JS如何實現。
答案:
1 function Del() 2 { 3 if(confirm("確定刪除")) 4 alert("刪除成功") 5 }
17.請寫出一個json的例子。
答案:[{"id":"123","name":"huawei"}]
18.List<Domain1> Alist 中有100個Domain1元素,且每個Domain1元素都有屬性string typStr,現在需要取出AList中所有typeStr="Atype"的元素,並組成新的List,該如何實現。
答案:
1 List<string> BList=new List<string>(); 2 foreach(var a in AList) 3 { 4 if(a.typeStr=="Atype") 5 Blist.add(a.typeStr); 6 }
19.EF框架中,使用DBFirst時數據庫中的表A沒有主鍵,能否通過“從數據庫更新模型“操作,將表A導入到EF框架中。
答案:不能,表必須要有主鍵,否則會報錯。
savechange()方法返回0,而不是正常的大於0的書。切記設置主鍵。
返回錯誤InnerException = {"無法更新 EntitySet“t_Customer”,因為它有一個 DefiningQuery,而 <ModificationFunctionMapping> 元素中沒有支持當前操作的 <InsertFunction> 元素。"}。
在發現錯誤后要吧原有的數據庫的表刪除,重新更新。如果不刪除的話,無法更新,並且要重新生成解決方案。
20.foreach和for循環誰的效率高?switch和if呢?
答案:foreach高,for 循環每次都要進行判斷i的大小,foreach 依賴 IEnumerable.第一次 var a in GetList() 時 調用 GetEnumerator 返回第一個對象 並 賦給a,以后每次再執 行 var a in GetList() 的時候 調用 MoveNext.直到循環結束。期間GetList()方法只執行一次.
同樣的道理:當有多個判斷時,switch更快。
21.WebService基於什么協議?
答案:soap協議,而Soap建立在http上的。
22.WebService和WebAPI 有什么不同。
1、webservice是基於SOAP協議的,數據格式是XML,webapi遵循的http協議,它的Response可以被而Web API的MediaTypeFormatter轉換成Json、XML 或者任何你想轉換的格式。
2、webservice它只能部署在IIS上,而webapi可以寄宿在不同的宿主上(寄宿的本質就是利用一個具體的應用程序為Web Api提供一個運行的環境,並解決請求的接收和響應的回復),如Web Host,Self Host方式
3、webservice 也可以通過ajax訪問。
4、webapi無狀態,相對webservice更輕量級。webapi支持如get,post等http操作,並且對限制帶寬的設備,比如智能手機等支持的很好。
這樣對比的話webservice貌似並不好用。但是我們為什么要用它呢,理由如下:
1、很好的跨編程語言和跨操作系統
2、可移植性:傳統的WebService只是利用了HTTP通道,進行獨立的交互,但是這個交互協議可以移植到其他協議下運作
23.C#是否支持多重繼承?
答案:不支持。多重繼承指的是一個類可以同時繼承多個類,比如A類繼承自B類和C類,這就是多重繼承。C#只能繼承一個類,但是可以繼承多個接口。
24.修飾符protected internal 的意思?
internal修飾的b在同一個項目中哪里都可以訪問,而在另外一個項目中就不能訪問,說明“同一程序集”指的是同一個項目;對於protected internal修飾的a在同一項目中哪里都可以訪問,而在其它項目中只有在派生類可以訪問,所以protected internal 修飾的成員變量是同一程序集或者派生類可以訪問,也就是protected跟internal的並集,而不是交集。(被protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問)查資料找到了兩種說法,不知道哪種是對的,個人以為是第一種是對的。
25.bs架構下,可否聲明一個靜態的數據庫連接對象,所有的業務類都引用該靜態連接對象去訪問數據庫?
答案:一個靜態的Sqlconnection來管理項目內所有的數據庫連接在絕大部分場景是不合理的
(沒說絕對不可行,在winform單線程項目中,這樣做是沒有問題的,因為操作者是一個用戶,每個用戶都有一份程序副本)
如果是多個用戶提交的請求是
同一個AppDomain中的函數,方法(這種說話不嚴謹,不過我暫時找不到更好的表達方式)
來處理時.都是用同一個靜態的Sqlconnection對象是不行的.
會引起並發問題,會引起相互干擾.還需要加鎖lock才能操作.
26.C#提供了一個默認的無參數構造函數,當我實現了另外一個有一個參數的構造函數的時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?
答案:兩個。
27.能夠阻止某一個類被其他類繼承么?能夠實現允許某個類被繼承,但不允許其中某個方法被覆寫嗎?
答案:(1)當對一個類應用 sealed 修飾符時,此修飾符會阻止其他類從該類繼承,(2)可以,標記這個類為public,並標記這個方法為sealed.
28.什么是強類型?C#是強類型嗎,JS呢?
答案:強類型指的是程序中表達的任何對象所從屬的類型都必須能在編譯時刻確定。常見的強類型語言有C++、Java、Apex和Python等,C#是強類型,JS不是。
29.金額等精確的數值聲明為什么類型?
答案:float,double,decimal
30.讀寫數據庫都需要哪些對象,簡要說明其作用。
答案1、 Connection:與數據源建立連接。
2、 Command:對數據源執行SQL命令並返回結果。
3、 DataReader:讀取數據源的數據,只允許對將數據源以只讀、順向的方式查看其中所存儲的數據。其常用於檢索大量數據,DataReader對象還是一種非常節省資源的數據對象。
4、 DataAdapter:對數據源執行操作並返回結果,在DataSet與數據源之間建立通信,將數據源中的數據寫入DataSet中,或根據DataSet中的數據綁定數據源。
5、 DataSet:內存中的數據庫,是數據表的集合,它可以包含任意多個數據表。
31.通過程序控制GC的強制回收是否可以提高效率?
答案:個人以為是可以的(在網上沒找到答案),GC是循環遍歷所有資源的,如果你已經強制回收了,那么遍歷的就會少,從而提高效率。
32.int?和int的區別。
答案:int?為可空類型,可以是null,他是通過把int裝箱為引用類型實現的。
33.求數列(1,1,2,3,5,8,13。。。。)的和。
答案:見第三題的循環寫法,定義一個變量為sum,sum+=arr[I]
34.BS架構下,在session中存儲了一個datatable的對象y,y在什么時候會被GC回收?這種存儲數據的方式是否合理?如果Application增加了對y的引用,什么時候會被GC回收?
答案:在session的生命周期結束之后回收,不合理,每個session儲存在服務器端的內存里,每個用戶都會有一個獨立的session,如果session的內容過於復雜,當大量的用戶訪問的時候會導致內存溢出。Application是所有用戶共有的,所以應該不會被回收(個人理解)。
35.string和stringbuilder的區別。
答案:System.String是不可變的字符串。System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法
36.舉例寫一個單例模式
1 public class Singleton 2 { 3 private static Singleton _Singleton = null; 4 private static object Singleton_Lock = new object(); 5 public static Singleton CreateInstance() 6 { 7 if (_Singleton == null) //雙if +lock 8 { 9 lock (Singleton_Lock) 10 { 11 Console.WriteLine("路過。"); 12 if (_Singleton == null) 13 { 14 Console.WriteLine("被創建。"); 15 _Singleton = new Singleton(); 16 } 17 } 18 } 19 return _Singleton; 20 } 21 }
37.描述一下virtual、sealed、override和abstract的區別。
答案:
virtual申明虛方法的關鍵字,說明該方法可以被重寫
sealed說明該類不可被繼承
override重寫基類的方法
abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。
38.List<int> listNumber,其中存儲了從1到100的數字,現需要將ListNumber按照形如“1,2,3,4.。。”輸出,請寫出相應的代碼。
1 foreach(var a in listNumber.sort()) 2 { 3 Console.WriteLine(a); 4 }
39.int,string,hashtable,datetime,datatable中哪些是引用類型?
答案:string,hashtable,datatable
40.一棵二叉查找樹(Binary Seach Tree)具有以下特點,樹中的任一節點,如果左子樹不為空,則左子樹的所有節點的值都小於該節點的值,如果右子樹不為空,那么右子樹所有節點的值都大於該節點的值;任一個節點的左右子樹都是二叉查找樹,示意圖如下
假設二叉查找樹的節點定義如下:
1 Class BSTreeNode{ 2 int value; 3 BSTreeNode leftChild; 4 BSTreeNode rightChild; 5 }
要實現一個方法printRang:按從小到大的順序輸出范圍在【min,max】之間的所有值。請寫出你認為最高效的代碼。
1 void printRang(BSTreeNode btsnode,int min,int max) 2 { 3 //中序遍歷,大於min的輸出,小於max的不輸出 5 //循環這里使用棧輔助進行遍歷 6 System.Collections.Generic.Stack<Tree> stack = new System.Collections.Generic.Stack<Tree>(); 7 while(btsnode != null || stack.Any()) 8 { 9 if(btsnode.value>max)break; 10 else if (btsnode != null) 11 { 12 stack.Push(btsnode); 13 btsnode = btsnode.Left; 14 } 15 else 16 { 17 var item = stack.Pop(); 18 if(item.Value>=min&&item.Value<=max) 19 Console.WriteLine(item.Value); 20 btsnode = item.Right; 21 } 23 } 24 }
41.請寫出一段在多線程運行時有可能產生死鎖(不需要一定產生)的代碼。
1 int string a="aaaa",b="bbbb"; 2 public void Seta(){ 3 lock(b) 4 { 5 a="bbbb"; 6 } 7 } 8 public void Setb(){ 9 lock(a) 10 { 11 b="aaaa"; 12 } 13 } 14 15 Thread t = new Thread(Seta); 16 Thread.Sleep(5000); 17 t.Start(); 18 Thread t2 = new Thread(Setb); 19 Thread.Sleep(5000); 20 t2.Start();
42.假設你的編程語言提供這樣的異步機制,把一個任務放在一個線程池中執行,當前線程繼續執行,直到調用這個任務取返回值的方法時才阻塞並等待任務完成拿到返回值。
現在有這樣一個場景,收到一個客戶端的訂單請求要檢查商品的庫存能否滿足,查詢該客戶按照當前的價格策略能否享受訂單的折扣才能接受訂單,而這兩個檢查都是非常耗時的操作。原來的代碼是這樣的:
1 public booleanprocessOrder(Order order) 2 { 3 if(!checkCustomerprice(order)) 4 return false; 5 if(!checkInventory(order)) 6 return false; 7 //訂單邏輯代碼不需要關注 8 return true; 9 }
請用上述的異步機制改寫這段代碼,減小這個方法的響應延遲。
1 //這里使用task 2 Task<bool> task = new Task<bool>(() => checkCustomerprice()); 3 task.Start(); 4 bool result = task.Result; 5 6 Task<bool> task2 = new Task<bool>(() => checkInventory()); 7 task2.Start(); 8 bool result2 = task2.Result; 9 10 if(result&&result2) 11 return true; 12 else 13 return false; 14 15 //自己研究寫的,不知道對不對,僅供參考
43.簡述private,protected,public,internal修飾符的訪問權限。
public(公共的) 完全公開,訪問不受限制。
protected(保護的) 訪問僅限於包含類或從包含類派生的類型。該類內部和繼承類中可以訪問。
internal(內部的) 訪問僅限於當前程序集。在同一命名空間內可以訪問。
protected internal(內部保護的) 訪問僅限於從包含類派生的當前程序集或類型(待確定)。
private(私有的) 訪問僅限於包含類型。在類的內部才可以訪問
44.ado.net的五個主要對象。答案見第30題。
45.列舉asp.net頁面之間傳值的幾種方式。
答案:
Request.Form["SourceData2"].ToString();
Request.QueryString["parameter1"].ToString();
Context.Items["value"].ToString();還有cookie,session,application
46.C#中委托是什么?事件是不是一種委托?事件和委托的關系。
答案:委托是指向事件的一種函數指針,把事件轉換為了一種引用類型的變量,可以讓其他函數調用。(純純的個人理解,網上有不同答案,我也不知道哪個是對的,建議找出版的資料。)
47.override(重寫)與重載overload的區別。
答案:override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法,
重載,一般是用於在一個類內實現若干重載的方法,這些方法的名稱相同而參數形式不同。
48.MVC模式。(我並沒有完全GET到這個考點)
答案:MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用於應用程序的分層開發。
49.什么是裝箱和拆箱?
答案:值類型轉換為引用類型是裝箱,引用類型裝換為值類型是拆箱。
50.什么叫應用程序域AppDomain。
答案: "域",就是范圍,環境,邊界的意思,那么什么是應用程序域,官方給出的是這樣的解釋:操作系統和運行庫環境通常會
在應用程序間提供某種形式的隔離.
應用程序域為安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。應用程序域通常由運行庫宿主創建,
運行庫宿主負責在運行應用程序之前引導公共語言運行庫。
應用程序域本質上就就是一種隔離,目的也就是使應用程序中運行的代碼不能直接訪問其他應用程序中的代碼或資
源如果你需要訪問其他應用程序中的對象時你就可以復制這些對象,或通過代理訪問這些對象.
51.堆和棧的區別。
答案:heap:是由malloc之類函數分配的空間所在地。地址是由低向高增長的,引用類型儲存在這。
stack:是自動分配變量,以及函數調用的時候所使用的一些空間。地址是由高向低減少的,值類型存儲在這。
52.GC是什么,為什么要有GC?
答案;垃圾回收器,如果沒有GC,那么一個系統隨着運行時間的增長,占用內存會越來越大,如果我們沒有主動釋放的話。
53。值類型和引用類型的區別。
答案:
1. 值類型的數據存儲在內存的棧中;引用類型的數據存儲在內存的堆中,而內存單元中只存放堆中對象的
地址。
2. 值類型存取速度快,引用類型存取速度慢。
3. 值類型表示實際數據,引用類型表示指向存儲在內存堆中的數據的指針或引用
4. 值類型繼承自System.ValueType,引用類型繼承自System.Object
5. 棧的內存分配是自動釋放;而堆在.NET中會有GC來釋放
6. 值類型的變量直接存放實際的數據,而引用類型的變量存放的則是數據的地址,即對象的引用。
7. 值類型變量直接把變量的值保存在堆棧中,引用類型的變量把實際數據的地址保存在堆棧中,而實際數據則保存在堆中。
54.C#中的接口和類有什么異同。
不同點:
不能直接實例化接口。
接口不包含方法的實現。
接口可以多繼承,類只能單繼承。
類定義可以在不同的源文件之間進行拆分。
相同點:
接口、類和結構都可以從多個接口繼承。
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口和類都可以包含事件、索引器、屬性。
54.try{}里有一個return語句,那么緊跟在這個try后面的finally{}里的code會不會被執行。什么時候執行?
答案;會,在return 之前執行。
55.描述線程與進程的區別。
1.進程有自己獨立的地址空間;而線程共享進程的地址空間;
2.一個程序至少有一個進程,一個進程至少有一個線程;
3.線程是處理器調度的基本單位,但進程不是;
4.二者均可並發執行
56.什么是反射?
答案:動態獲取程序集信息,動態獲取類的屬性和方法。
57.什么是匿名方法?請寫一段代碼。
delegate(int i) { return i > 0; }
58.寫出幾種工作流產品或框架,並簡要的對比他們的差異。
59.寫出你所了解的設計模式,說一說使用設計模式帶來的好處,並嘗試用代碼寫出一個例子。
60.接受一個數組,找出兩個數的索引,這兩個數組相加之和等於指定的數字。找出一組即可,同一元素不可使用兩次。
比如:nums=[2,7,11,15],目標數字是9,因為nums【0】+nums【1】=9,所以返回【0,1】
答案:最簡單的方法是使用兩個for循環,此種方法不給出代碼了,下面是第二種算法,需要先進行排序,排序算法略。
1 int[] getindex(int n) 2 { 3 int i=0,j=nums.length-1 4 while(i>j) 5 { 6 if(nums[i]+nums[j]==n)break; 7 else if(nums[i]+nums[j]>n)j--; 8 else i++; 9 } 10 int[] a=new int[]{i,j} 11 return a; 12 }
61.
SELECT * FROM 表 /*數據源*/ AS P PIVOT ( SUM(Amount/*行轉列后 列的值*/) FOR p.Month/*需要行轉列的列*/ IN (1,2,3,4/*列的值*/) ) AS T
附注:列轉行語句。測試語句
1 CREATE TABLE ProgrectDetail 2 ( 3 ProgrectName NVARCHAR(20), --工程名稱 4 OverseaSupply INT, --海外供應商供給數量 5 NativeSupply INT, --國內供應商供給數量 6 SouthSupply INT, --南方供應商供給數量 7 NorthSupply INT --北方供應商供給數量 8 ) 9 10 INSERT INTO ProgrectDetail 11 SELECT 'A', 100, 200, 50, 50 12 UNION ALL 13 SELECT 'B', 200, 300, 150, 150 14 UNION ALL 15 SELECT 'C', 159, 400, 20, 320 16 UNION ALL
1 SELECT P.ProgrectName,P.Supplier,P.SupplyNum 2 FROM 3 ( 4 SELECT ProgrectName, OverseaSupply, NativeSupply, 5 SouthSupply, NorthSupply 6 FROM ProgrectDetail 7 )T 8 UNPIVOT 9 ( 10 SupplyNum FOR Supplier IN 11 (OverseaSupply, NativeSupply, SouthSupply, NorthSupply ) 12 ) P
執行結果:
62.描述new有兩種用法
第一種:new Class():創建對象
第二種:覆蓋方法
public new XXXX(){}
63.傳入某個屬性的set方法的隱含參數的名稱是什么?
value,它的類型和屬性所聲名的類型相同。
64.下面的代碼中有什么錯誤嗎?_______
1 using System; 2 class A 3 { 4 public virtual void F(){ 5 Console.WriteLine("A.F"); 6 } 7 } 8 abstract class B:A 9 { 10 public abstract override void F(); 11 12 //答:abstract override 是不可以一起修飾. 13 } // new public abstract void F();
65.net的錯誤處理機制是什么?
答:.net錯誤處理機制采用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch為止。
66.如何在C#中實現繼承?也就是繼承的格式
在類名后加上一個冒號,再加上基類的名稱。
67.描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
答:不是。可以用任意類型.https://www.cnblogs.com/yaoxiaodan/p/5295132.html
68.私有成員會被繼承么?
會,但是不能被訪問。所以看上去他們似乎是不能被繼承的,但實際上確實被繼承了.
69.C#中所有對象共同的基類是什么?
System.Object
70.在方法定義中,virtual有什么含意?
被virtual修飾的方法可以被子類覆寫.
71.能夠將非靜態的方法覆寫成靜態方法么?
不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override
72.可以覆寫私有的虛方法么?
不可以,甚至子類中無法訪問父類中的私有方法
73.什么是抽象類(abstract class)?
一種不可以被實例化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法后才能被實例化.
74.接口(interface)是什么?
只含有公有抽象方法(public abstract method)的類。這些方法必須在子類中被實現.
75.接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
答:接口可以繼承接口。抽象類可以實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
76.構造器Constructor是否可被override?
答:構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
77.是否可以繼承String類?
答:String類是final類故不可以繼承.
78.數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有length()這個方法(查網上資料說有個方法,但個人實驗了一下是沒有的,只有Length屬性).
79.成員變量和成員函數前加static的作用?
答:它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。分別用來反映類的狀態。比如類成員變量可以用來統計類實例的數量,類成員函數負責這種統計的動作。
80.在c#中using和new這兩個關鍵字有什么意義,請寫出你所知道的意義?using 指令 和語句 new 創建實例 new 隱藏基類中方法。
答:using 引入名稱空間或者使用非托管資源
new 新建實例或者隱藏父類方法
81.什么是虛函數?什么是抽象函數?
答:虛函數:沒有實現的,可由子類繼承並重寫的函數。抽象函數:規定其非虛子類必須實現的函數,必須被重寫。
82.c#中的三元運算符是?
答:?:
83.public static const int A=1;這段代碼有錯誤么?是什么?
答:const不能用static修飾。
84.Ref參數是引用調用,out參數是輸入調用。
85.const和readonly有什么區別?
const可以用於局部常量,而readonly實際是類的initonly字段,顯然不能是局部的,const是編譯時常量,readonly是運行時常量。
86.虛函數的用法:
答:1)virtual指明一成員函數為虛函數,而virtual僅用於類的定義里,在類外可不加此關鍵字.
2)一個類的成員函數被定義為虛函數時,子類該函數仍保持虛函數特征.
3)子類覆蓋此函數時,定義里可不加virtual關鍵字,但函數聲明要和基類的完全一致!且此聲明是必須的.
4)不是純虛函數時,父類的虛函數必須要實現; 而若將父類的虛函數設定為純虛函數時,子類必需要覆蓋之而且必須要實現之!
87.解釋virtual、sealed、override和abstract的區別
virtual申明虛方法的關鍵字,說明該方法可以被重寫
sealed說明該類不可被繼承
override重寫基類的方法
abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。
88.對象和類的區別是什么?
答:“類”(Class)具有相同屬性和方法的一組對象的集合. 類是抽象的概念,僅僅是模板
對象是一個你能夠看得到、摸得着的具體實體。
89.什么是局部變量,什么是成員變量?
答:局部變量是指一個方法中定義的變量;成員變量是指在類范圍里定義的變量,也就是之前講過的屬性。
90.靜態成員和實例成員的區別?
答:使用static修飾的成員稱為靜態成員,使用實例對象調用的成員稱為實例成員
91.概述序列化
答: 序列化是將對象的狀態存儲到特定存儲介質中的過程。
反序列化則是從特定存儲介質中的數據重新構建對象的過程
92.對象能否調用靜態方法 ?
答:不能。對於類內部定義的靜態變量及靜態方法,該類的對象均不能調用。
93為什么不能指定接口中方法的修飾符?
答:接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義。他們默認為公有方法。
94.請詳述在.net中類(class)與結構(struct)的異同:
答:Class可以被實例化,屬於引用類型,是分配在內存的堆上的,Struct屬於值類型,是分配在內存的棧上的
95.接口和抽象類具有什么區別?
答:含有abstract修飾符的class即為抽象類,abstract 類不能創建的實例對象。含有abstract方法的類必須定義為abstract class,abstract class類中的方法不必是抽象的。abstract class類中定義抽象方法必須在具體子類中實現,所以,不能有抽象構造方法或抽象靜態方法。如果的子類沒有實現抽象父類中的所有抽象方法,那么子類也必須定義為abstract類型。
接口(interface)可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認為public abstract類型
下面比較一下兩者的語法區別:
1. 抽象類可以有構造方法,接口中不能有構造方法。
2. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
3. 抽象類中抽象方法可以指定為public,接口中抽象方法不能指定任何修飾符,默認就是public
4. 一個類可以實現多個接口,但只能繼承一個抽象類。
96.base關鍵字的作用是什么?
答:子類繼承父類的過程中,可能需要在子類中調用父類中的成員,如屬性、方法或者構造方法。這個時候,可以使用base關鍵字來完成。base的作用是用於引用父類的成員,如屬性、方法或者是構造方法
97.什么是抽象類?
答:抽象類不能創建實例,它只能作為父類被繼承。抽象類是從多個具體類中抽象出來的父類,它具有更高層次的抽象。從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為其子類的模板,從而避免了子類的隨意性。
98.接口和抽象類兩者在應用上的區別:
答:接口更多的是在系統架構設計方法發揮作用,主要用於定義模塊之間的通信契約。而抽象類在代碼實現方面發揮作用,可以實現代碼的重用
99.面向對象的特征有哪些方面?
答:面向對象的編程語言有封裝、繼承 、抽象、多態等4個主要的特征。
封裝:
封裝的目標就是要實現軟件部件的“高內聚、低耦合”,防止程序相互依賴性而帶來的變動影響。
抽象:
抽象就是找出一些事物的相似和共性之處,然后將這些事物歸為一個類
繼承:
子類繼承父類成員,實現代碼復用,提高了軟件的可重用性和可擴展性。
多態:
不同子類對同一個消息作出不同的反映,提高軟件靈活性
100.在C#中,string str=null string str= string.Empty與string str=“”請盡量使用文字或圖象說明其中的區別。
答: string.Empty:不分配存儲空間。"":分配一個長度為空的存儲空間,""和String.Empty,這兩個都是表示空字符串,空字符串是一個特殊的字符串,只不過這個字符串的值為空,在內存中是有准確的指向的。
101.Params是什么含義?
答:Params是C#中的關鍵字,采用此關鍵字可以指定參數數目為可變;在方法聲明中的params關鍵字之后不允許任何其他參數,並且在方法聲明中只允許一個params關鍵字。
102.float f=-123.567F; int i=(int)f;i的值現在是_____? 答:-123
103.C#中 property(屬性) 與 attribute(特性)的區別,他們各有什么用處,這種機制的好處在哪里?
答:屬性:用於存取類的字段。特性:用來標識類,方法等的附加性質。
attribute:自定義屬性的基類;property :類中的屬性。
104.