學(xué)習(xí)啦 > 創(chuàng)業(yè)指南 > 職場(chǎng) > 面試題 > C#習(xí)題大全(2)

C#習(xí)題大全(2)

時(shí)間: 文樺657 分享

C#習(xí)題大全

  19. A類是B類的基類,并且都有自己的構(gòu)造,析構(gòu)函數(shù),請(qǐng)舉例證明B類從實(shí)例化到消亡過(guò)程中構(gòu)造,析構(gòu)函

  數(shù)的執(zhí)行過(guò)程.請(qǐng)附code

  構(gòu)造先父后子,析夠反之

  public class TestB

  {

  public TestB()

  {

  Console.Write("begin create B object"r"n");

  }

  ~TestB()

  {

  Console.Write("begin destory B object"r"n");

  }

  }

  public class TestA : TestB

  {

  public TestA()

  {

  Console.Write("begin create A object"r"n");

  }

  ~TestA()

  {

  Console.Write("begin destory A object"r"n");

  }

  }

  21..Net中讀寫(xiě)數(shù)據(jù)庫(kù)需要用到哪些類?他們的作用

  sqlconnection 連接數(shù)據(jù)庫(kù),sqlcommand 執(zhí)行T-SQL語(yǔ)句,或存儲(chǔ)過(guò)程

  22.ASP.net的身份驗(yàn)證方式有哪些?分別是什么原理?

  asp.net提供了3種認(rèn)證方式: windows身份驗(yàn)證, Forms驗(yàn)證和Passport驗(yàn)證.windows, 身份驗(yàn)證: IIS根據(jù)應(yīng)用程序的設(shè)置執(zhí)行身份驗(yàn)證.要使用這種驗(yàn)證方式,在IIS中必須禁用匿名訪問(wèn).Forms驗(yàn)證:用Cookie來(lái)保存用戶憑證,并將未經(jīng)身份驗(yàn)證的用戶重定向到自定義的登錄頁(yè).Passport驗(yàn)證:通過(guò)Microsoft的集中身份驗(yàn)證服務(wù)執(zhí)行的,他為成員站點(diǎn)提供單獨(dú)登錄和核心配置文件服務(wù).

  23.解釋一下UDDI、WSDL的意義及其作用。

  UDDI(Universal Description, Discovery and Integration)統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議,是為解決Web服務(wù)的發(fā)布和發(fā)現(xiàn)問(wèn)題而制訂的新一代基于Internet的電子商務(wù)技術(shù)標(biāo)準(zhǔn)。它包含一組基于Web的、分布式的Web服務(wù)信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn),以及一組使企業(yè)能將自己提供的Web服務(wù)注冊(cè)到該中心的實(shí)現(xiàn)標(biāo)準(zhǔn)。

  UDDI利用SOAP消息來(lái)查找和注冊(cè)Web服務(wù)。并為應(yīng)用程序提供了一系列接口來(lái)訪問(wèn)注冊(cè)中心。

  24.常用的調(diào)用webservice方法有哪些?三種

  利用webservice.htc調(diào)用WebService方法

  在Internet上調(diào)用WebService方法

  25.講一講你理解的web service,在dot net framework中,怎么很好的結(jié)合x(chóng)ml(講概念就行了)

  Web Service就是一個(gè)應(yīng)用程序,它向外界暴露出一個(gè)能夠通過(guò)Web進(jìn)行調(diào)用的API。這就是說(shuō),你能夠用編程的方法通過(guò)Web調(diào)用來(lái)實(shí)現(xiàn)某個(gè)功能的應(yīng)用程序。Web Service是一種新的Web應(yīng)用程序分支,它們是自包含、自描述、模塊化的應(yīng)用,可以在網(wǎng)絡(luò)(通常為Web)中被描述、發(fā)布、查找以及通過(guò)Web來(lái)調(diào)用。Web Service便是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體的技術(shù)規(guī)范,這些規(guī)范使得Web Service能與其他兼容的組件進(jìn)行互操作。它可以使用標(biāo)準(zhǔn)的互聯(lián)網(wǎng)協(xié)議,像超文本傳輸協(xié)議HTTP和XML,將功能體現(xiàn)在互聯(lián)網(wǎng)和企業(yè)內(nèi)部網(wǎng)上。Web Service平臺(tái)是一套標(biāo)準(zhǔn),它定義了應(yīng)用程序如何在Web上實(shí)現(xiàn)互操作性。你可以用你喜歡的任何語(yǔ)言,在你喜歡的任何平臺(tái)上寫(xiě)Web Service??蓴U(kuò)展的標(biāo)記語(yǔ)言XML 是Web Service平臺(tái)中表示數(shù)據(jù)的基本格式。除了易于建立和易于分析外,XML主要的優(yōu)點(diǎn)在于它既與平臺(tái)無(wú)關(guān),又與廠商無(wú)關(guān)。XML是由萬(wàn)維網(wǎng)協(xié)會(huì)(W3C)創(chuàng)建,W3C制定的XML SchemaXSD 定義了一套標(biāo)準(zhǔn)的數(shù)據(jù)類型,并給出了一種語(yǔ)言來(lái)擴(kuò)展這套數(shù)據(jù)類型。

  Web Service平臺(tái)是用XSD來(lái)作為數(shù)據(jù)類型系統(tǒng)的。當(dāng)你用某種語(yǔ)言如VB.NET或C# 來(lái)構(gòu)造一個(gè)Web Service時(shí),為了符合Web Service標(biāo)準(zhǔn),所有你使用的數(shù)據(jù)類型都必須被轉(zhuǎn)換為XSD類型。如想讓它使用在不同平臺(tái)和不同軟件的不同組織間傳遞,還需要用某種東西將它包裝起來(lái)。這種東西就是一種協(xié)議,如 SOAP。

  26.C#可否對(duì)內(nèi)存進(jìn)行直接的操作?(這可是個(gè)難點(diǎn)哦?要注意!),如果能,如何操作;如果不能,為什么

  可以,用指針來(lái)操作

  27.描述一下C#中索引器的實(shí)現(xiàn)過(guò)程,是否只能根據(jù)數(shù)字進(jìn)行索引?

  C#通過(guò)提供索引器,可以象處理數(shù)組一樣處理對(duì)象。特別是屬性,每一個(gè)元素都以一個(gè)get或set方法暴露。索引器不單能索引數(shù)字(數(shù)組下標(biāo)),還能索引一些HASHMAP的字符串,所以,通常來(lái)說(shuō),C#中類的索引器通常只有一個(gè),就是THIS,但也可以有無(wú)數(shù)個(gè),只要你的參數(shù)列表不同就可以了索引器和返回值無(wú)關(guān), 索引器最大的好處是使代碼看上去更自然,更符合實(shí)際的思考模式.

  28.面向?qū)ο蟮乃枷胫饕ㄊ裁?

  封裝:用抽象的數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類型內(nèi)部。

  繼承:子類擁有父類的所有數(shù)據(jù)和操作。

  多態(tài):一個(gè)程序中同名的不同方法共存的情況。有兩種形式的多態(tài)– 重載與重寫(xiě)。

  29.什么是ASP.net中的用戶控件

  有時(shí)可能需要控件中具有內(nèi)置 ASP.NET Web 服務(wù)器控件未提供的功能。在這種情況下,您可以創(chuàng)建自己的控件。有兩個(gè)選擇。您可以創(chuàng)建:用戶控件。用戶控件是能夠在其中放置標(biāo)記和 Web 服務(wù)器控件的容器。然后,可以將用戶控件作為一個(gè)單元對(duì)待,為其定義屬性和方法。

  自定義控件。自定義控件是編寫(xiě)的一個(gè)類,此類從 Control 或 WebControl 派生。

  ASP.NET Web 用戶控件與完整的 ASP.NET 網(wǎng)頁(yè)(.aspx 文件)相似,同時(shí)具有用戶界面頁(yè)和代碼。可以采取與創(chuàng)建 ASP.NET 頁(yè)相似的方式創(chuàng)建用戶控件,然后向其中添加所需的標(biāo)記和子控件。用戶控件可以像頁(yè)面一樣包含對(duì)其內(nèi)容進(jìn)行操作(包括執(zhí)行數(shù)據(jù)綁定等任務(wù))的代碼。

  用戶控件與 ASP.NET 網(wǎng)頁(yè)有以下區(qū)別:

  用戶控件的文件擴(kuò)展名為 .ascx。

  用戶控件中沒(méi)有 @ Page 指令,而是包含 @ Control 指令,該指令對(duì)配置及其他屬性進(jìn)行定義。

  用戶控件不能作為獨(dú)立文件運(yùn)行。而必須像處理任何控件一樣,將它們添加到 ASP.NET 頁(yè)中。

  用戶控件中沒(méi)有 html、body 或 form 元素。這些元素必須位于宿主頁(yè)中。

  可以在用戶控件上使用與在 ASP.NET 網(wǎng)頁(yè)上所用相同的 HTML 元素(html、body 或 form 元除外)和 Web 控件。例如,如果您要?jiǎng)?chuàng)建一個(gè)將用作工具欄的用戶控件,則可以將一系列 Button Web服務(wù)器控件放在該控件上,并創(chuàng)建這些按鈕的事件處理程序。

  創(chuàng)建用戶控件要比創(chuàng)建自定義控件方便很多,因?yàn)榭梢灾赜矛F(xiàn)有的控件。用戶控件使創(chuàng)建具有復(fù)雜用戶界面元素的控件極為方便。

  30.什么叫應(yīng)用程序域?什么是受管制的代碼?什么是強(qiáng)類型系統(tǒng)?什么是裝箱和拆箱?什么是重載?

  CTS、CLS和CLR分別作何解釋?

  應(yīng)用程序域應(yīng)用程序域?yàn)榘踩?、可靠性、版本控制以及卸載程序集提供了隔離邊界。應(yīng)用程序域通常由運(yùn)行庫(kù)宿主創(chuàng)建,運(yùn)行庫(kù)宿主負(fù)責(zé)在運(yùn)行應(yīng)用程序之前引導(dǎo)公共語(yǔ)言運(yùn)行庫(kù)。應(yīng)用程序域提供了一個(gè)更安全、用途更廣的處理單元,公共語(yǔ)言運(yùn)行庫(kù)可使用該單元提供應(yīng)用程序之間的隔離。托管代碼使用基于公共語(yǔ)言運(yùn)行庫(kù)的語(yǔ)言編譯器開(kāi)發(fā)的代碼稱為托管代碼;托管代碼具有許多優(yōu)點(diǎn),例如:跨語(yǔ)言集成、跨語(yǔ)言異常處理、增強(qiáng)的安全性、版本控制和部署支持、簡(jiǎn)化的組件交互模型、調(diào)試和分析服務(wù)等。裝箱和拆箱裝箱和拆箱使值類型能夠被視為對(duì)象。對(duì)值類型裝箱將把該值類型打包到 Object 引用類型的一個(gè)實(shí)例中。這使得值類型可以存儲(chǔ)于垃圾回收堆中。拆箱將從對(duì)象中提取值類型。重載每個(gè)類型成員都有一個(gè)唯一的簽名。方法簽名由方法名稱和一個(gè)參數(shù)列表(方法的參數(shù)的順序和類型)組成。只要簽名不同,就可以在一種類型內(nèi)定義具有相同名稱的多種方法。當(dāng)定義兩種或多種具有相同名稱的方法時(shí),就稱作重載。CTS通用類型系統(tǒng) (common type system)一種確定公共語(yǔ)言運(yùn)行庫(kù)如何定義、使用和管理類型的規(guī)范。CLR公共語(yǔ)言運(yùn)行庫(kù).NET Framework 提供了一個(gè)稱為公共語(yǔ)言運(yùn)行庫(kù)的運(yùn)行時(shí)環(huán)境,它運(yùn)行代碼并提供使開(kāi)發(fā)過(guò)程更輕松的服務(wù)。CLS公共語(yǔ)言規(guī)范要和其他對(duì)象完全交互,而不管這些對(duì)象是以何種語(yǔ)言實(shí)現(xiàn)的,對(duì)象必須只向調(diào)用方公開(kāi)那些它們必須與之互用的所有語(yǔ)言的通用功能。為此定義了公共語(yǔ)言規(guī)范 (CLS),它是許多應(yīng)用程序所需的一套基本語(yǔ)言功能。強(qiáng)類型C# 是強(qiáng)類型語(yǔ)言;因此每個(gè)變量和對(duì)象都必須具有聲明類型。

  31.列舉一下你所了解的XML技術(shù)及其應(yīng)用

  可擴(kuò)展標(biāo)記語(yǔ)言XML(eXtensible Markup Language)[1]是一種簡(jiǎn)單靈活的文本格式的可擴(kuò)展標(biāo)記語(yǔ)言,起源于SGML(Standard Generalized Markup Language),是SGML的一個(gè)子集合,也就是SGML的一個(gè)簡(jiǎn)化版本,非常適合于在Web上或者其它多種數(shù)據(jù)源間進(jìn)行數(shù)據(jù)的交換.

  32.值類型和引用類型的區(qū)別?寫(xiě)出C#的樣例代碼。

  基于值類型的變量直接包含值。將一個(gè)值類型變量賦給另一個(gè)值類型變量時(shí),將復(fù)制包含的值。這與引用類型變量的賦值不同,引用類型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身。所有的值類型均隱式派生自 System.ValueType。與引用類型不同,從值類型不可能派生出新的類型。但與引用類型相同的是,結(jié)構(gòu)也可以實(shí)現(xiàn)接口。與引用類型不同,值類型不可能包含 null 值。然而,可空類型功能允許將 null 賦給值類型。每種值類型均有一個(gè)隱式的默認(rèn)構(gòu)造函數(shù)來(lái)初始化該類型的默認(rèn)值。值類型主要由兩類組成:結(jié)構(gòu)、枚舉,結(jié)構(gòu)分為以下幾類:Numeric(數(shù)值)類型、整型、浮點(diǎn)型、decimal、bool、用戶定義的結(jié)構(gòu)。引用類型的變量又稱為對(duì)象,可存儲(chǔ)對(duì)實(shí)際數(shù)據(jù)的引用。聲明引用類型的關(guān)鍵字:class、interface、delegate、內(nèi)置引用類型: object、string

  33.ADO.net中常用的對(duì)象有哪些?分別描述一下。

  Connection 數(shù)據(jù)庫(kù)連接對(duì)象Command 數(shù)據(jù)庫(kù)命令DataReader 數(shù)據(jù)讀取器DataSet 數(shù)據(jù)集

  34.如何理解委托?

  委托類似于 C++ 函數(shù)指針,但它是類型安全的。委托允許將方法作為參數(shù)進(jìn)行傳遞。委托可用于定義回調(diào)方法。委托可以鏈接在一起;例如,可以對(duì)一個(gè)事件調(diào)用多個(gè)方法。方法不需要與委托簽名精確匹配。有關(guān)更多信息,請(qǐng)參見(jiàn)協(xié)變和逆變。C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。

  35.C#中的接口和類有什么異同。

  異:不能直接實(shí)例化接口。接口不包含方法的實(shí)現(xiàn)。接口、類和結(jié)構(gòu)可從多個(gè)接口繼承。但是C# 只支持單繼承:類只能從一個(gè)基類繼承實(shí)現(xiàn)。類定義可在不同的源文件之間進(jìn)行拆分。

  同:接口、類和結(jié)構(gòu)可從多個(gè)接口繼承。接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。接口可以包含事件、索引器、方法和屬性。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

  37.UDP連接和TCP連接的異同。

  TCP---傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。

  UDP---用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。

  39.進(jìn)程和線程分別怎么理解?

  進(jìn)程和線程都是由操作系統(tǒng)所體會(huì)的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對(duì)應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于:簡(jiǎn)而言之,一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程.線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。另外,進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。線程在執(zhí)行過(guò)程中與進(jìn)程還是有區(qū)別的。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。從邏輯角度來(lái)看,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位.線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源.一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程;同一個(gè)進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行.

  40.什么是code-Behind技術(shù)。

  就是代碼隱藏,在ASP.NET中通過(guò)ASPX頁(yè)面指向CS文件的方法實(shí)現(xiàn)顯示邏輯和處理邏輯的分離,這樣有助于web應(yīng)用程序的創(chuàng)建。比如分工,美工和編程的可以個(gè)干各的,不用再像以前asp那樣都代碼和html代碼混在一起,難以維護(hù)。

  41..net中讀寫(xiě)XML的類都?xì)w屬于哪些命名空間?

  System.XML類

  42.什么是SOAP?有哪些應(yīng)用。

  SOAP(Simple Object Access Protocol )簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過(guò)程調(diào)用的協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對(duì)象或代碼,在任何平臺(tái)上,以任何一直語(yǔ)言相互通信。

  SOAP 是一種輕量級(jí)協(xié)議,用于在分散型、分布式環(huán)境中交換結(jié)構(gòu)化信息。 SOAP 利用 XML 技術(shù)定義一種可擴(kuò)展的消息處理框架,它提供了一種可通過(guò)多種底層協(xié)議進(jìn)行交換的消息結(jié)構(gòu)。這種框架的設(shè)計(jì)思想是要獨(dú)立于任何一種特定的編程模型和其他特定實(shí)現(xiàn)的語(yǔ)義。SOAP 定義了一種方法以便將 XML 消息從 A 點(diǎn)傳送到 B 點(diǎn)。 為此,它提供了一種基于 XML 且具有以下特性的消息處理框架:1) 可擴(kuò)展,2) 可通過(guò)多種底層網(wǎng)絡(luò)協(xié)議使用,3) 獨(dú)立于編程模型。

  43.如何理解.net中的垃圾回收機(jī)制。

  .NET Framework 的垃圾回收器管理應(yīng)用程序的內(nèi)存分配和釋放。每次您使用 new 運(yùn)算符創(chuàng)建對(duì)象時(shí),運(yùn)行庫(kù)都從托管堆為該對(duì)象分配內(nèi)存。只要托管堆中有地址空間可用,運(yùn)行庫(kù)就會(huì)繼續(xù)為新對(duì)象分配空間。但是,內(nèi)存不是無(wú)限大的。最終,垃圾回收器必須執(zhí)行回收以釋放一些內(nèi)存。垃圾回收器優(yōu)化引擎根據(jù)正在進(jìn)行的分配情況確定執(zhí)行回收的最佳時(shí)間。當(dāng)垃圾回收器執(zhí)行回收時(shí),它檢查托管堆中不再被應(yīng)用程序使用的對(duì)象并執(zhí)行必要的操作來(lái)回收它們占用的內(nèi)存。

  44.什么是WEB控件?使用WEB控件有那些優(yōu)勢(shì)?

  運(yùn)行在服務(wù)器端的控件,只要將HTML控件加上runat=server.

  45.請(qǐng)談?wù)剬?duì)正則表達(dá)式的看法?

  正則表達(dá)式是一種處理文本的有用工具。無(wú)論是驗(yàn)證用戶輸入、搜索字符串內(nèi)的模式、還是以各種有效方式重新設(shè)置文本格式,正則表達(dá)式都非常有用。

  46.WEB控件可以激法服務(wù)端事件,請(qǐng)談?wù)劮?wù)端事件是怎么發(fā)生并解釋其原理?自動(dòng)傳回是什么?為什么

  要使用自動(dòng)傳回。

  在web控件發(fā)生事件時(shí),客戶端采用提交的形式將數(shù)據(jù)交回服務(wù)端,服務(wù)端先調(diào)用Page_Load事件,然后根據(jù)傳回的狀態(tài)信息自動(dòng)調(diào)用服務(wù)端事件自動(dòng)傳回是當(dāng)我們?cè)邳c(diǎn)擊客戶端控件時(shí),采用提交表單的形式將數(shù)據(jù)直接傳回到務(wù)端只有通過(guò)自動(dòng)傳回才能實(shí)現(xiàn)服務(wù)端事件的機(jī)制,如果沒(méi)有自動(dòng)回傳機(jī)制就只能調(diào)用客戶端事件,而不能調(diào)用服務(wù)端事件

  47.WEB控件及HTML服務(wù)端控件能否調(diào)用客戶端方法?如果能,請(qǐng)解釋如何調(diào)用?

  可以調(diào)用,例如:

  48.請(qǐng)解釋web.config文件中的重要節(jié)點(diǎn)

  Web.config文件是一個(gè)XML文本文件,它用來(lái)儲(chǔ)存 ASP.NET Web 應(yīng)用程序的配置信息(如最常用的設(shè)置ASP.NET Web 應(yīng)用程序的身份驗(yàn)證方式),它可以出現(xiàn)在應(yīng)用程序的每一個(gè)目錄中。當(dāng)你通過(guò)VB.NET新建一個(gè)Web應(yīng)用程序后,默認(rèn)情況下會(huì)在根目錄自動(dòng)創(chuàng)建一個(gè)默認(rèn)的Web.config文件,包括默認(rèn)的配置設(shè)置,所有的子目錄都繼承它的配置設(shè)置。如果你想修改子目錄的配置設(shè)置,你可以在該子目錄下新建一個(gè)Web.config文件。它可以提供除從父目錄繼承的配置信息以外的配置信息,也可以重寫(xiě)或修改父目錄中定義的設(shè)置?!?、 節(jié)作用:配置 ASP.NET 身份驗(yàn)證支持(為Windows、Forms、PassPort、None四種)。該元素只能在計(jì)算機(jī)、站點(diǎn)或應(yīng)用程序級(jí)別聲明。 元素必需與 節(jié)配合使用。示例:以下示例為基于窗體(Forms)的身份驗(yàn)證配置站點(diǎn),當(dāng)沒(méi)有登陸的用戶訪問(wèn)需要身份驗(yàn)證的網(wǎng)頁(yè),網(wǎng)頁(yè)自動(dòng)跳轉(zhuǎn)到登陸網(wǎng)頁(yè)。 其中元素loginUrl表示登陸網(wǎng)頁(yè)的名稱,name表示Cookie名稱2、 節(jié)作用:控制對(duì) URL 資源的客戶端訪問(wèn)(如允許匿名用戶訪問(wèn))。此元素可以在任何級(jí)別(計(jì)算機(jī)、站點(diǎn)、應(yīng)用程序、子目錄或頁(yè))上聲明。必需與 節(jié)配合使用。3、節(jié)作用:配置 ASP.NET 使用的所有編譯設(shè)置。默認(rèn)的debug屬性為“True”.在程序編譯完成交付使用之后應(yīng)將其設(shè)為True(Web.config文件中有詳細(xì)說(shuō)明,此處省略示例)4、作用:為 ASP.NET 應(yīng)用程序提供有關(guān)自定義錯(cuò)誤信息的信息。它不適用于 XML Web services 中發(fā)生的錯(cuò)誤。5、節(jié)作用:配置 ASP.NET HTTP 運(yùn)行庫(kù)設(shè)置。該節(jié)可以在計(jì)算機(jī)、站點(diǎn)、應(yīng)用程序和子目錄級(jí)別聲明?!?、 作用:標(biāo)識(shí)特定于頁(yè)的配置設(shè)置(如是否啟用會(huì)話狀態(tài)、視圖狀態(tài),是否檢測(cè)用戶的輸入等)??梢栽谟?jì)算機(jī)、站點(diǎn)、應(yīng)用程序和子目錄級(jí)別聲明。7、  作用:為當(dāng)前應(yīng)用程序配置會(huì)話狀態(tài)設(shè)置(如設(shè)置是否啟用會(huì)話狀態(tài),會(huì)話狀態(tài)保存位置)。 8、  作用:配置 ASP.NET 跟蹤服務(wù),主要用來(lái)程序測(cè)試判斷哪里出錯(cuò)。

  49.請(qǐng)解釋ASP.NET中的web頁(yè)面與其隱藏類之間的關(guān)系?

  一個(gè)ASP.NET頁(yè)面一般都對(duì)應(yīng)一個(gè)隱藏類,一般都在ASP.NET頁(yè)面的聲明中指定了隱藏類例如一個(gè)頁(yè)面Tst1.aspx的頁(yè)面聲明如下Codebehind="Tst1.aspx.cs" 表明經(jīng)編譯此頁(yè)面時(shí)使用哪一個(gè)代碼文件Inherits="T1.Tst1" 表用運(yùn)行時(shí)使用哪一個(gè)隱藏類

  50.什么是viewstate,能否禁用?是否所用控件都可以禁用

  Viewstate是保存狀態(tài)的一種機(jī)制,EnableViewState屬性設(shè)置為false即可禁用

  ViewState 是由 ASP.NET 頁(yè)面框架管理的一個(gè)隱藏的窗體字段。當(dāng) ASP.NET 執(zhí)行某個(gè)頁(yè)面時(shí),該頁(yè)面上的 ViewState 值和所有控件將被收集并格式化成一個(gè)編碼字符串,然后被分配給隱藏窗體字段的值屬性(即)。由于隱藏窗體字段是發(fā)送到客戶端的頁(yè)面的一部分,所以 ViewState 值被臨時(shí)存儲(chǔ)在客戶端的瀏覽器中。如果客戶端選擇將該頁(yè)面回傳給服務(wù)器,則ViewState 字符串也將被回傳?;貍骱?,ASP.NET 頁(yè)面框架將解析ViewState字符串,并為該頁(yè)面和各個(gè)控件填充 ViewState屬性。然后,控件再使用 ViewState 數(shù)據(jù)將自己重新恢復(fù)為以前的狀態(tài)

  51.當(dāng)發(fā)現(xiàn)不能讀取頁(yè)面上的輸入的數(shù)據(jù)時(shí)很有可能是什么原因造成的?怎么解決

  很有可能是在Page_Load中數(shù)據(jù)處理時(shí)沒(méi)有進(jìn)行Page的IsPostBack屬性判斷

  52.請(qǐng)解釋一個(gè)WEB頁(yè)面中代碼執(zhí)行次序。

  Init,Load,PreRender事件執(zhí)行順序:

  1)控件的Init事件

  2)控件所在頁(yè)面的Init事件

  3)控件所在頁(yè)面的Load事件

  4)控件的Load事件

  5)控件所在頁(yè)面的PreRender事件

  6)控件的PreRender事件

  規(guī)律:

  1)Init事件從最里面的控件(包括用戶控件及普通控件)向最外面的控件(頁(yè)面)引發(fā),Load及PreRender等其他事件從最外面的控件向最里面的控件引發(fā);

  2)控件之間相同事件的執(zhí)行順序依控件在頁(yè)面的位置按從左到右,從上到下的先后順序執(zhí)行。

  注意:

  1)切記用戶控件也被視為頁(yè)面中的一個(gè)控件;

  2)把用戶控件作為單獨(dú)的一個(gè)特殊頁(yè)面來(lái)看,它本身及其所包含的控件同樣遵守相同的規(guī)律;

  3)有時(shí)在客戶端程序(如javascript)中會(huì)用到客戶端body對(duì)像的onload事件,注意這個(gè)客戶端事件是最后執(zhí)行,即在服務(wù)器端所有事件執(zhí)行完后才執(zhí)行.

  53.請(qǐng)解釋什么是上下文對(duì)象,在什么情況下要使用上下文對(duì)象

  上下文對(duì)象是指HttpContext類的Current 屬性,當(dāng)我們?cè)谝粋€(gè)普通類中要訪問(wèn)內(nèi)置對(duì)象(Response,Request,Session,Server,Appliction等)時(shí)就要以使用此對(duì)象

  54.請(qǐng)解釋轉(zhuǎn)發(fā)與跳轉(zhuǎn)的區(qū)別?

  轉(zhuǎn)發(fā)就是服務(wù)端的跳轉(zhuǎn)A頁(yè)面提交數(shù)據(jù)到B頁(yè)面,B頁(yè)面進(jìn)行處理然后從服務(wù)端跳轉(zhuǎn)到其它頁(yè)面跳轉(zhuǎn)就是指客戶端的跳轉(zhuǎn)

  55.請(qǐng)解釋ASP.NET中不同頁(yè)面之間數(shù)據(jù)傳遞有那些方式?

  session(viewstate) 簡(jiǎn)單,但易丟失,application 全局,cookie 簡(jiǎn)單,但可能不支持,可能被偽造input ttype="hidden" 簡(jiǎn)單,可能被偽造,url參數(shù) 簡(jiǎn)單,顯示于地址欄,長(zhǎng)度有限,數(shù)據(jù)庫(kù) 穩(wěn)定,安全,但性能相對(duì)弱

  56.請(qǐng)解釋ASP.NET中button linkbutton imagebutton 及hyperlink這四個(gè)控件之間的功別

  1.Button和ImageButton用于將數(shù)據(jù)傳遞回服務(wù)器.

  2.Hyperlink用于在頁(yè)面之間導(dǎo)航

  3.LinkButton用于將數(shù)據(jù)保存到服務(wù)器或訪問(wèn)服務(wù)器上的數(shù)據(jù)

  4.LinkButton 控件具有與 HyperLink 控件相同的外觀,不過(guò)卻具有與 Button 控件相同的功能

  57.請(qǐng)解釋一下.NET多層應(yīng)用程序中層與層之間以那幾種方式進(jìn)行數(shù)據(jù)傳遞。并解釋你自己的項(xiàng)目中采用那

  種方式進(jìn)行。

  自定義類結(jié)構(gòu)傳數(shù)據(jù)

  58.如果需要在GridView控件中的某一列中添加下拉列表框并綁定數(shù)據(jù)怎么解決?

  后臺(tái)的Rowdatabound事件可以進(jìn)行綁定,比如這樣

  if(數(shù)據(jù)行)

  {

  DropDownList ddl = (DropDownList)e.row.FindControl("DropDownListID");

  ddl.datasource = 數(shù)據(jù)源;(假定你已經(jīng)設(shè)置了key和value綁定字段)

  ddl.databind();

  }

  59.請(qǐng)解釋asp.net中的數(shù)據(jù)綁定與傳統(tǒng)數(shù)據(jù)綁定有什么區(qū)別?

  傳統(tǒng)的數(shù)據(jù)綁定是一種“連接數(shù)據(jù)綁定”,即在數(shù)據(jù)綁定期間,客戶端一直保持與數(shù)據(jù)庫(kù)的連接,這種狀態(tài)下,數(shù)據(jù)庫(kù)的性能大受影響。asp.net的數(shù)據(jù)綁定是一種“非連接數(shù)據(jù)綁定”,即只在讀取和更新數(shù)據(jù)的瞬間,才與數(shù)據(jù)庫(kù)連接并交換數(shù)據(jù),之后便可釋放與數(shù)據(jù)庫(kù)的連接,數(shù)據(jù)庫(kù)的性能因此將大大提高。

  60.請(qǐng)解釋接口的顯式實(shí)現(xiàn)有什么意義?

  接口可以有靜態(tài)成員、嵌套類型、抽象、虛擬成員、屬性和事件。實(shí)現(xiàn)接口的任何類都必須提供接口中所聲明的抽象成員的定義。接口可以要求任何實(shí)現(xiàn)類必須實(shí)現(xiàn)一個(gè)或多個(gè)其他接口。

  1、因?yàn)轱@式接口成員執(zhí)行體不能通過(guò)類的實(shí)例進(jìn)行訪問(wèn),這就可以從公有接口中把接口的實(shí)現(xiàn)部分單獨(dú)分離開(kāi)。如果一個(gè)類只在內(nèi)部使用該接口,而類的使用者不會(huì)直接使用到該接口,這種顯式接口成員執(zhí)行體就可以起到作用。

  2、顯式接口成員執(zhí)行體避免了接口成員之間因?yàn)橥l(fā)生混淆。如果一個(gè)類希望對(duì)名稱和返回類型相同的接口成員采用不同的實(shí)現(xiàn)方式,這就必須要使用到顯式接口成員執(zhí)行體。如果沒(méi)有顯式接口成員執(zhí)行體,那么對(duì)于名稱和返回類型不同的接口成員,類也無(wú)法進(jìn)行實(shí)現(xiàn)。

  61.您在什么情況下會(huì)用到虛方法?它與接口有什么不同?

  當(dāng)在繼承類中想重寫(xiě)某一方法時(shí)會(huì)用到虛方法;虛方法是類的成員函數(shù),接口相當(dāng)于抽象類

  62.Override與重載有什么區(qū)別?

  重載是提供了一種機(jī)制, 相同函數(shù)名通過(guò)不同的返回值類型以及參數(shù)來(lái)表來(lái)區(qū)分的機(jī)制

  override是用于重寫(xiě)基類的虛方法,這樣在派生類中提供一個(gè)新的方法

  覆寫(xiě)(Override)的兩個(gè)函數(shù)的函數(shù)特征相同,重載(Overload)的兩個(gè)函數(shù)的函數(shù)名雖然相同,但函數(shù)特征不同。

  函數(shù)特征包括函數(shù)名,參數(shù)的類型和個(gè)數(shù)。

  1. override

  使用 override 修飾符來(lái)修改方法、屬性、索引器或事件。重寫(xiě)方法提供從基類繼承的成員的新實(shí)現(xiàn)。由重寫(xiě)聲明重寫(xiě)的方法稱為重寫(xiě)基方法。重寫(xiě)基方法必須與重寫(xiě)方法具有相同的簽名。

  不能重寫(xiě)非虛方法或靜態(tài)方法。重寫(xiě)基方法必須是虛擬的、抽象的或重寫(xiě)的。

  也就是說(shuō),用 override 修飾符重寫(xiě)的基類中的方法必須是 virtual, abstract 或 override 方法

  2. 重載

  當(dāng)類包含兩個(gè)名稱相同但簽名不同的方法時(shí)發(fā)生方法重載。

  使用重載方法的指南:

  a. 用方法重載來(lái)提供在語(yǔ)義上完成相同功能的不同方法。

  b. 使用方法重載而不是允許默認(rèn)參數(shù)。默認(rèn)參數(shù)的版本控制性能不好,因此公共語(yǔ)言規(guī)范(CLS)中不允許使用默認(rèn)參數(shù)。

  c. 正確使用默認(rèn)值。在一個(gè)重載方法系列中,復(fù)雜方法應(yīng)當(dāng)使用參數(shù)名來(lái)指示從簡(jiǎn)單方法中假定的默認(rèn)狀態(tài)發(fā)生的更改。

  d. 對(duì)方法參數(shù)使用一致的排序和命名模式。提供一組重載方法,這組重載方法帶有遞增數(shù)目的參數(shù),以使開(kāi)發(fā)人員可以指定想要的級(jí)別的信息,這種情況很常見(jiàn)。您指定的參數(shù)越多,開(kāi)發(fā)人員就可指定得越詳細(xì)。

  e. 如果必須提供重寫(xiě)方法的能力,請(qǐng)僅使最完整的重載是虛擬的并根據(jù)它來(lái)定義其他操作。

  // 下面具體解釋一下這種模式,只有最后一個(gè)方法(參數(shù)最完整的方法)是虛方法,在繼承了這個(gè)類的子類中只要重寫(xiě)(override)這個(gè)方法就行了。

  63.怎樣理解靜態(tài)變量?

  靜態(tài)變量具有在某一個(gè)類中具有全局型.

  64.向服務(wù)器發(fā)送請(qǐng)求有幾種方式?

  Post,Get.

  65.DataReader與Dataset有什么區(qū)別?

  DataReader和DataSet最大的區(qū)別在于,DataReader使用時(shí)始終占用SqlConnection,在線操作數(shù)據(jù)庫(kù).任何對(duì)SqlConnection的操作都會(huì)引發(fā)DataReader的異常.因?yàn)镈ataReader每次只在內(nèi)存中加載一條數(shù)據(jù),所以占用的內(nèi)存是很小的..因?yàn)镈ataReader的特殊性和高性能.所以DataReader是只進(jìn)的.你讀了第一條后就不能再去讀取第一條了. DataSet則是將數(shù)據(jù)一次性加載在內(nèi)存中.拋棄數(shù)據(jù)庫(kù)連接.讀取完畢即放棄數(shù)據(jù)庫(kù)連接.因?yàn)镈ataSet將數(shù)據(jù)全部加載在內(nèi)存中.所以比較消耗內(nèi)存.但是確比DataReader要靈活.可以動(dòng)態(tài)的添加行,列,數(shù)據(jù).對(duì)數(shù)據(jù)庫(kù)進(jìn)行回傳更新操作

  66.如果在一個(gè)B/S結(jié)構(gòu)的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有

  幾種方法進(jìn)行處理?

  使用Request["string"].Request.QueryString["flag"]

  67.用.net做B/S結(jié)構(gòu)的系統(tǒng),您是用幾層結(jié)構(gòu)來(lái)開(kāi)發(fā),每一層之間的關(guān)系以及為什么要這樣分層?

  一般為3層 , 數(shù)據(jù)訪問(wèn)層,業(yè)務(wù)層,表示層。數(shù)據(jù)訪問(wèn)層對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪查改。業(yè)務(wù)層一般分為二層,業(yè)務(wù)表觀層實(shí)現(xiàn)與表示層的溝通,業(yè)務(wù)規(guī)則層實(shí)現(xiàn)用戶密碼的安全等。表示層為了與用戶交互例如用戶添加表單。優(yōu)點(diǎn):分工明確,條理清晰,易于調(diào)試,而且具有可擴(kuò)展性。缺點(diǎn):增加成本。

  68.軟件開(kāi)發(fā)過(guò)程一般有幾個(gè)階段?每個(gè)階段的作用?

  1)問(wèn)題定義;2)可行性研究;3)需求分析;4)總體設(shè)計(jì);5)詳細(xì)設(shè)計(jì);6)編碼和單元測(cè)試;7)綜合測(cè)試;8)軟件維護(hù)。

  69.微軟推出了一系列的Application Block,請(qǐng)舉出您所知道的Application Block并說(shuō)明其作用?

  SqlHelper 列如:SqlHelper.ExcuteDataSet()執(zhí)行存儲(chǔ)過(guò)程.

  70.請(qǐng)列舉一些您用到過(guò)的設(shè)計(jì)模式以及在什么情況下使用該模式?

  抽象工廠

  71.通過(guò)超鏈接怎樣傳遞中文參數(shù)?

  傳遞時(shí)用HttpUtility.UrlEncodeUnicode("中文參數(shù)"),獲取時(shí)直接用Request.QueryString["參數(shù)"]就行了

  72.請(qǐng)編程遍歷頁(yè)面上所有TextBox控件并給它賦值為string.Empty?

  foreach (Control a in this.Page.Form.Controls)

  {

  string name = a.GetType().Name;

  if (a.GetType().Name == "TextBox")

  {

  TextBox mm = a as TextBox;

  mm.Text = string.Empty;

  }

  }

  73.請(qǐng)編程實(shí)現(xiàn)一個(gè)冒泡排序算法?

  private static int[] Sort(int[] arrayNum)

  {

  int i, j, k;

  bool exchange;

  for (i = 1; i < arrayNum.Length; i++)

  {

  exchange = false;

  for (j = arrayNum.Length - 1; j >= i; j--)

  {

  if (arrayNum[j - 1] > arrayNum[j])

  {

  k = arrayNum[j];

  arrayNum[j] = arrayNum[j - 1];

  arrayNum[j - 1] = k;

  exchange = true;

  }

  }

  if (!exchange)

  {

  break;

  }

  }

  return arrayNum;

  }

  75.進(jìn)程和線程的區(qū)別

  進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的單位;線程是CPU調(diào)度和分派的單位,一個(gè)進(jìn)程可以有多個(gè)線程,這些線程共享這個(gè)進(jìn)程的資源。

  76.成員變量和成員函數(shù)前加static的作用

  它們被稱為常成員變量和常成員函數(shù),又稱為類成員變量和類成員函數(shù)。分別用來(lái)反映類的狀態(tài)。比如類成員變量可以用來(lái)統(tǒng)計(jì)類實(shí)例的數(shù)量,類成員函數(shù)負(fù)責(zé)這種統(tǒng)計(jì)的動(dòng)作。

  77.堆和棧的區(qū)別

  棧:由編譯器自動(dòng)分配、釋放。在函數(shù)體中定義的變量通常在棧上。堆:一般由程序員分配釋放。用new、malloc等分配內(nèi)存函數(shù)分配得到的就是在堆上。棧是機(jī)器系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),而堆則是C/C++函數(shù)庫(kù)提供的。棧是系統(tǒng)提供的功能,特點(diǎn)是快速高效,缺點(diǎn)是有限制,數(shù)據(jù)不靈活;而棧是函數(shù)庫(kù)提供的功能,特點(diǎn)是靈活方便,數(shù)據(jù)適應(yīng)面廣泛,但是效率有一定降低。棧是系統(tǒng)數(shù)據(jù)結(jié)構(gòu),對(duì)于進(jìn)程/線程是唯一的;堆是函數(shù)庫(kù)內(nèi)部數(shù)據(jù)結(jié)構(gòu),不一定唯一。不同堆分配的內(nèi)存無(wú)法互相操作。??臻g分靜態(tài)分配和動(dòng)態(tài)分配兩種。靜態(tài)分配是編譯器完成的,比如自動(dòng)變量(auto)的分配。動(dòng)態(tài)分配由alloca函數(shù)完成。棧的動(dòng)態(tài)分配無(wú)需釋放(是自動(dòng)的),也就沒(méi)有釋放函數(shù)。為可移植的程序起見(jiàn),棧的動(dòng)態(tài)分配操作是不被鼓勵(lì)的!堆空間的分配總是動(dòng)態(tài)的,雖然程序結(jié)束時(shí)所有的數(shù)據(jù)空間都會(huì)被釋放回系統(tǒng),但是精確的申請(qǐng)內(nèi)存/釋放內(nèi)存匹配是良好程序的基本要素。

  78. C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機(jī)制的好處在哪里?

  在C#中有兩個(gè)屬性,分別為Property和Attribute, Property比較簡(jiǎn)單,就是我們常用的get和set,主要用于為類中的private和protected變量提供讀取和設(shè)置的接口。Attribute用來(lái)說(shuō)明這個(gè)事物的各種特征的一種描述。而Attribute就是干這事的。它允許你將信息與你定義的C#類型相關(guān)聯(lián),作為類型的標(biāo)注。這些信息是任意的,就是說(shuō),它不是由語(yǔ)言本身決定的,你可以隨意建立和關(guān)聯(lián)任何類型的任何信息。你可以作用屬性定義設(shè)計(jì)時(shí)信息和運(yùn)行時(shí)信息,甚至是運(yùn)行時(shí)的行為特征。關(guān)鍵在于這些信息不僅可以被用戶取出來(lái)作為一種類型的標(biāo)注,它更可以被編譯器所識(shí)別,作為編譯時(shí)的一種附屬條件參加程序的編譯。定義屬性:屬性實(shí)際上是一個(gè)派生自System.Attribute基類的類。System.Attribute類含有幾個(gè)用于訪問(wèn)和檢查自定義屬性的方法。盡管你有權(quán)將任何類定義為屬性,但是按照慣例來(lái)說(shuō),從System.Attribute派生類是有意義的

  79.C#可否對(duì)內(nèi)存進(jìn)行直接的操作?

  可以,我們知道,.NET相比C++最值得稱贊的是他的GC(垃圾回收機(jī)制)。GC會(huì)在系統(tǒng)空閑或內(nèi)存不足的時(shí)候自動(dòng)回收不再被使用的對(duì)象。因此,我們不再需要向C++編程一樣處處小心內(nèi)存泄漏。同時(shí),為了提高內(nèi)存的使用效率,GC在回收內(nèi)存的時(shí)候,會(huì)對(duì)內(nèi)存進(jìn)行整理,有些類似硬盤(pán)整理的原理。從而導(dǎo)致對(duì)象被在內(nèi)存中移位。

  80.維護(hù)數(shù)據(jù)庫(kù)的完整性、一致性、你喜歡用觸發(fā)器還是自寫(xiě)業(yè)務(wù)邏輯?為什么

  盡可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空字段)實(shí)現(xiàn),這種方式的效率最好;其次用觸發(fā)器,這種方式可以保證無(wú)論何種業(yè)務(wù)系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)都能維持?jǐn)?shù)據(jù)庫(kù)的完整性、一致性;最后再考慮用自寫(xiě)業(yè)務(wù)邏輯實(shí)現(xiàn),但這種方式效率最低、編程最復(fù)雜,當(dāng)為下下之策。

  81.ADO.NET相對(duì)于ADO等主要有什么改進(jìn)?

  ADO以Recordset存儲(chǔ),而ADO.NET則以DataSet表示。Recordset看起來(lái)更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進(jìn)行多表連接。反之,DataSet可以是多個(gè)表的集合。ADO 的運(yùn)作是一種在線方式,這意味著不論是瀏覽或更新數(shù)據(jù)都必須是實(shí)時(shí)的。ADO.NET則使用離線方式,在訪問(wèn)數(shù)據(jù)的時(shí)候ADO.NET會(huì)利用XML制作數(shù)據(jù)的一份幅本,ADO.NET的數(shù)據(jù)庫(kù)連接也只有在這段時(shí)間需要在線。由于ADO使用COM技術(shù),這就要求所使用的數(shù)據(jù)類型必須符合COM規(guī)范,而ADO.NET基于XML格式,數(shù)據(jù)類型更為豐富并且不需要再做COM編排導(dǎo)致的數(shù)據(jù)類型轉(zhuǎn)換,從而提高了整體性能。

  82.C#中要使一個(gè)類支持FOREACH遍歷,實(shí)現(xiàn)過(guò)程怎樣?

  若要循環(huán)訪問(wèn)集合,集合必須滿足特定的要求。例如,在下面的 foreach 語(yǔ)句中:

  foreach (ItemType item in myCollection)

  myCollection 必須滿足下列要求:

  集合類型:

  必須是 interface、class 或 struct。

  必須包括返回類型的名為 GetEnumerator 的實(shí)例方法,例如 Enumerator。

  Enumerator 類型(類或結(jié)構(gòu))必須包含:

  一個(gè)名為 Current 的屬性,它返回 ItemType 或者可以轉(zhuǎn)換為此類型的類型。屬性訪問(wèn)器返回集合的當(dāng)前元素。

  一個(gè)名為 MoveNext 的 bool 方法,它遞增項(xiàng)計(jì)數(shù)器并在集合中存在更多項(xiàng)時(shí)返回 true。

  有三種使用集合的方法:

  1.使用上述指導(dǎo)創(chuàng)建一個(gè)集合。此集合只能用于 C# 程序。

  2.使用上述指導(dǎo)創(chuàng)建一個(gè)一般集合,另外實(shí)現(xiàn) IEnumerable 接口。此集合可用于其他語(yǔ)言(如 Visual Basic)。

  3.在集合類中使用一個(gè)預(yù)定義的集合。

  83.接口和抽象類有什么區(qū)別?你選擇使用接口和抽象類的依據(jù)是什么?

  接口是一個(gè)純粹的抽象類,沒(méi)有任何實(shí)際的東西,只是定義了一個(gè)框架,而抽象類里面可以有實(shí)際的一個(gè)方法,并不要求所有的方法都是抽象的??梢詫?shí)現(xiàn)一個(gè)接口中的所有方法,也可以繼承一個(gè)抽象的類,然后覆寫(xiě)其中的方法。接口一般只有方法,而沒(méi)有數(shù)據(jù)成員或?qū)傩浴3橄箢愑蟹椒?,也有?shù)據(jù)成員或?qū)傩?一般情況下,優(yōu)先考慮用接口,只有當(dāng)可能要訪問(wèn)到數(shù)據(jù)成員或?qū)傩詴r(shí),用抽象類。

  84.自定義控件和一般用戶控件的異同?如果要用這兩者之一,你會(huì)選擇哪種?為什么

  用戶控件模型適合創(chuàng)建內(nèi)部,應(yīng)用程序特定的控件,而自定義控件模型更適合創(chuàng)建通用的和可再分發(fā)的控件

  85.大概描述一下ASP.NET服務(wù)器控件的生命周期

  1. 初始化 - Init 事件 (OnInit 方法)

  2. 加載視圖狀態(tài) - LoadViewState 方法

  3. 處理回發(fā)數(shù)據(jù) - LoadPostData 方法:s對(duì)實(shí)現(xiàn) IPostBackDataHandler 接口的控件,即可以自動(dòng)加載回發(fā)數(shù)據(jù)的控件,如 TextBox, DropDownList 等。

  4. 加載 - Load 事件 (OnLoad 方法)

  5. 發(fā)送回發(fā)更改通知 - RaisePostDataChangedEvent 方法 :對(duì)實(shí)現(xiàn) IPostBackDataHandler 接口的控件,即可以自動(dòng)加載回發(fā)數(shù)據(jù)的控件。 在第 3 步中加載回發(fā)數(shù)據(jù),如果回發(fā)前后數(shù)據(jù)發(fā)生更改,則在這一步觸發(fā)相應(yīng)的服務(wù)端事件。

  6. 處理回發(fā)事件 - RaisePostBackEvent 方法:對(duì)實(shí)現(xiàn) IPostBackEventHandler 接口的控件,即能引起回發(fā)的控件,如 Button, LinkButton, Calendar 等

  7. 預(yù)呈現(xiàn) - PreRender 事件 (OnPreRender 方法)

  8. 保存視圖狀態(tài) - SaveViewState 方法

  9. 呈現(xiàn) - Render 方法

  10. 處置 - Dispose 方法

  11. 卸載 - UnLoad 事件 (OnUnLoad 方法)

  86.UML

  統(tǒng)一建模語(yǔ)言( U M L)是一個(gè)通用的可視化建模語(yǔ)言,用于對(duì)軟件進(jìn)行描述、可視化處理、構(gòu)造和建立軟件系統(tǒng)制品的文檔。它記錄了對(duì)必須構(gòu)造的系統(tǒng)的決定和理解,可用于對(duì)系統(tǒng)的理解、設(shè)計(jì)、瀏覽、配置、維護(hù)和信息控制。

  87.談?wù)刦inal, finally, finalize的區(qū)別。

  final 修飾符用于指定類不能擴(kuò)展或者方法或?qū)傩圆荒苤貙?xiě)。它將防止其他類通過(guò)重寫(xiě)重要的函數(shù)來(lái)更改該類的行為。帶有 final 修飾符的方法可以由派生類中的方法來(lái)隱藏或重載。finally 塊用于清除在 try 塊中分配的任何資源??刂瓶偸莻鬟f給 finally 塊,與 try 塊的存在方式無(wú)關(guān)。finalize允許 Object 在“垃圾回收”回收 Object 之前嘗試釋放資源并執(zhí)行其他清理操作。

  88.&和&&的區(qū)別。

  &&為邏輯與,輸出結(jié)果為布爾(真假)型; &為按位與,輸出結(jié)果為數(shù)值型。

  89.GC是什么 為什么要有GC

  GC是垃圾收集器。這個(gè)類別中的方法會(huì)影響什么時(shí)候?qū)?duì)象執(zhí)行內(nèi)存回收,以及什么時(shí)候釋放對(duì)象所配置的資源。這個(gè)類別的屬性會(huì)提供系統(tǒng)中可用內(nèi)存的總數(shù)量以及配置至對(duì)象的內(nèi)存之年齡分類或?qū)哟鹊认嚓P(guān)信息。內(nèi)存回收行程會(huì)追蹤并重新利用在 Managed 內(nèi)存中配置的對(duì)象。內(nèi)存回收行程會(huì)定期執(zhí)行內(nèi)存回收來(lái)重新利用配置給對(duì)象的內(nèi)存 (該對(duì)象并無(wú)有效的參考)。當(dāng)沒(méi)有可用的內(nèi)存來(lái)因應(yīng)內(nèi)存的要求時(shí),會(huì)自動(dòng)發(fā)生內(nèi)存回收?;蛘?,應(yīng)用程序可以使用 Collect 方法來(lái)強(qiáng)制進(jìn)行內(nèi)存回收。

  內(nèi)存回收包含下列步驟:

  a.內(nèi)存回收行程會(huì)搜尋在 Managed 程序代碼中所參考的 Managed 對(duì)象。

  b.內(nèi)存回收行程會(huì)嘗試最終處理未參考的對(duì)象。

  c.內(nèi)存回收行程會(huì)釋放未參考并且回收其內(nèi)存的對(duì)象。

  90.Math.round(11.5)等於多少 Math.round(-11.5)等於多少

  Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回與參數(shù)最接近的長(zhǎng)整數(shù),參數(shù)加1/2

  求其floor

  91.short s1 = 1; s1 = s1 + 1;有什么錯(cuò) short s1 = 1; s1 += 1;有什么錯(cuò)

  short s1 = 1; s1 = s1 + 1; (s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)

  short s1 = 1; s1 += 1;(可以正確編譯)

  92.數(shù)組有沒(méi)有l(wèi)ength()這個(gè)方法 String有沒(méi)有l(wèi)ength()這個(gè)方法:

  在c#數(shù)組和string只有l(wèi)ength屬性,沒(méi)有方法

  93.abstract class和interface有什么區(qū)別

  abstract 修飾詞可用于類別、方法、屬性、索引子 (Indexer) 和事件。在類別宣告里使用 abstract

  飾詞,表示該類別只是當(dāng)做其它類別的基底類別而已。成員如果標(biāo)記為抽象,或是包含在抽象類(Abstract Class) 內(nèi),則必須由衍生自此抽象類別的類別實(shí)作這個(gè)成員。

  在靜態(tài)屬性上使用 abstract 修飾詞是錯(cuò)誤的。

  在抽象方法宣告中使用 static 或 virtual 修飾詞是錯(cuò)誤的。

  接口只包含方法、委派或事件的簽章。方法的實(shí)作 (Implementation) 是在實(shí)作接口的類別中完成,

  94.是否可以繼承String類

  否,無(wú)法繼承自密封類

  95.try {}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally {}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后

  會(huì),在return后.

  96.兩個(gè)對(duì)象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對(duì)不對(duì)

  不對(duì),有相同的GetHashCode();

  97.當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那

  這里到底是值傳遞還是引用傳遞

  引用傳遞

  98.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上

  都可以

  99.編程題: 寫(xiě)一個(gè)Singleton出來(lái)。

  100.c#中的三元運(yùn)算符是

  a?b:c

  101.當(dāng)整數(shù)a賦值給一個(gè)object對(duì)象時(shí),整數(shù)a將會(huì)被

  裝箱

  102.類成員有_____種可訪問(wèn)形式?

  this.;new Class().Method;

  103.public static const int A=1;這段代碼有錯(cuò)誤么?是什么?

  const不能用static修飾

  104.float f=-123.567F; int i=(int)f; i的值現(xiàn)在是

  -123

  105.委托聲明的關(guān)鍵字是______ delagete

288037