2023年net面試題庫全_第1頁
2023年net面試題庫全_第2頁
2023年net面試題庫全_第3頁
2023年net面試題庫全_第4頁
2023年net面試題庫全_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

一、c#

1.請解釋在new與override的區(qū)別?

在C#中,new關鍵字可用作運算符或修飾符。

?new運算符用于在堆上創(chuàng)建對象和調用構造函數(shù)。

?new修飾符用于隱藏基類成員的繼承成員。

使用override修飾符來修改方法、屬性、索引器或事件。重寫方法提供從基類繼承的成員

的新實現(xiàn)。由重寫聲明重寫的方法稱為重寫基方法。重寫基方法必須與重寫方法具有相同的

署名。

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

重寫聲明不能更改虛方法的可訪問性。重寫方法和虛方法必須具有相同的訪問級修飾符。不

能使用下列修飾符修改重寫方法:newstaticvirtualabstract重寫屬性聲明必須指定

與繼承屬性完全相同的訪問修飾符、類型和名稱,并且重寫屬性必須是虛擬的、抽象的或重

寫的。

2.請解釋virtual的含義?

virtual關鍵字用于修改方法或屬性的聲明,在這種情況下,方法或屬性被稱作虛擬成

員。虛擬成員的實現(xiàn)可由派生類中的重寫成員更改。

調用虛方法時,將為重寫成員檢查該對象的運營時類型。將調用大部分派生類中的該重寫成

員,假如沒有派生類重寫該成員,則它也許是原始成員。默認情況下,方法是非虛擬的。不

能重寫非虛方法。不能將virtual修飾符與以下修飾符一起使用:staticabstractoverride

除了聲明和調用語法不同外,虛擬屬性的行為與抽象方法同樣。

?在靜態(tài)屬性上使用virtual修飾符是錯誤的。

?通過涉及使用override修飾符的屬性聲明,可在派生類中重寫虛擬繼承屬性

3.請解釋.net采用委托實現(xiàn)的事件模型與JAVA中采用接口實現(xiàn)的事件模型有什么區(qū)別,

以圖示方式解釋。

4.請解釋接口的顯式實現(xiàn)有什么意義?

接口是其他類型為保證它們支持某些操作而實現(xiàn)的引用類型。接口從不直接創(chuàng)建并且

沒有實際的表達形式,其他類型必須轉換為接口類型。一個接口定義一個協(xié)定。實現(xiàn)接口的

類或結構必須遵守其協(xié)定。接口可以包含方法、屬性、索引器和事件作為成員。

5.請以圖示方式解釋.netframework?

VB

C++

c#

JScript

CommonLanguageSpecification

XMLWeb

services

WebForms

WindowsForms

DataandXML

BaseClassLibrary

CLR

CLI

VisualStudio.NET

6.什么是.net?

,net是一種平臺和框架,.net不是單純的語言也不是單純的工具,它是從底層平臺開始

構建起來的一個整體框架

6.Ref與out有什么不同?

方法參數(shù)上的ref方法參數(shù)關鍵字使方法引用傳遞到方法的同一個變量。當控制傳

遞回調用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。若要使用ref參

數(shù),必須將參數(shù)作為ref參數(shù)顯式傳遞到方法。ref參數(shù)的值被傳遞到ref參數(shù)。傳遞到ref

參數(shù)的參數(shù)必須最先初始化。將此方法與out參數(shù)相比,后者的參數(shù)在傳遞到out參數(shù)之

前不必顯式初始化。屬性不是變量,不能作為ref參數(shù)傳遞。假如兩種方法的聲明僅在它

們對ref的使用方面不同,則將出現(xiàn)重載.但是,無法定義僅在ref和out方面不同的重

載。

方法參數(shù)上的out方法參數(shù)關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞

回調用方法時,在方法中對參數(shù)所做的任何更改都將反映在該變量中。

當希望方法返回多個值時,聲明out方法非常有用。使用out參數(shù)的方法仍然可以返回一

個值。一個方法可以有一個以上的out參數(shù)。若要使用out參數(shù),必須將參數(shù)作為out參

數(shù)顯式傳遞到方法。out參數(shù)的值不會傳遞到out參數(shù)。不必初始化作為out參數(shù)傳遞的

變量。然而,必須在方法返回之前為out參數(shù)賦值。屬性不是變量,不能作為out參數(shù)傳

遞。假如兩個方法的聲明僅在out的使用方面不同,則會發(fā)生重載。但是,無法定義僅在ref

和out方面不同的重載。

7.值類型與引用類型有什么不同?請舉例說明?并分別列舉幾種相應的數(shù)據類型。

大多數(shù)編程語言提供內置的數(shù)據類型(比如整數(shù)和浮點數(shù)),這些數(shù)據類型會在作為參數(shù)傳

遞時被復制(即,它們通過值來傳遞)。在.NETFramework中,這些稱為值類型。您可以

創(chuàng)建值類型的實例,將它們作為參數(shù)傳遞,將它們存儲為局部變量,或將它們存儲在另一值

類型或對象的字段中。值類型沒有與存儲類的實例相關的系統(tǒng)開銷,并且它們不需要構造函

數(shù)。值類型可以有字段、屬性和事件。它們也有靜態(tài)和非靜態(tài)方法。當它們被裝箱時,會從

System.ValueType繼承虛方法,并可實現(xiàn)零個或更多接口。值類型是密封的,這意味著不能

從它們派生出其他類型。但是,可以直接對值類型定義虛方法,并且既可對該類型的已裝箱

形式,也可對未裝箱形式調用這些方法。盡管不能從一種值類型派生出另一種類型,但是當

所用語言解決虛方法比解決非虛方法或靜態(tài)方法更方便時,可以對值類型定義虛方法。

引用類型的變量又稱為對象,可存儲對實際數(shù)據的引用。以下用于聲明引用類型的關鍵字:

?class

?interface

?delegate

8.結構體是值類型還是引用類型的?

是值類型。

9.C#中有沒有靜態(tài)構造函數(shù),假如有是做什么用的?

有.靜態(tài)構造函數(shù)用于初始化類。在創(chuàng)建第一個實例或引用任何靜態(tài)成員之前,

將自動調用靜態(tài)構造函數(shù)來初始化類。靜態(tài)構造函數(shù)既沒有訪問修飾符,也沒有參數(shù)。在創(chuàng)

建第一個實例或引用任何靜態(tài)成員之前,將自動調用靜態(tài)構造函數(shù)來初始化類。無法直接調

用靜態(tài)構造函數(shù)。在程序中,用戶無法控制何時執(zhí)行靜態(tài)構造函數(shù)。靜態(tài)構造函數(shù)的典型用

途是:當類使用日記文獻時,將使用這種構造函數(shù)向日記文獻中寫入項。

10.在C#中如何實現(xiàn)多態(tài)?

“多態(tài)性”指定義具有功能不同但名稱相同的方法或屬性的多個類的能力,這些

類可由客戶端代碼在運營時互換使用。大部分面向對象的編程系統(tǒng)都通過繼承提供多態(tài)性。

基于繼承的多態(tài)性涉及在基類中定義方法并在派生類中使用新實現(xiàn)重寫它們。

11.什么是反射?如何實現(xiàn)反射?

反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動態(tài)地創(chuàng)建類型的實例,將

類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型。然后,可以調用類型的方法或訪問其字段

和屬性。通過反射命名空間中的類以及System.Type,您可以獲取有關已加載的程序集和在

其中定義的類型(如類、接口和值類型)的信息。您也可以使用反射在運營時創(chuàng)建類型實例,

然后調用和訪問這些實例。

12.請解釋流與文獻有什么不同?

文獻是一些具有永久存儲及特定順序的字節(jié)組成的一個有序的、具有名稱的集合。因此,對

于文獻,人們常會想到目錄途徑、磁盤存儲、文獻和目錄名等方面。相反,流提供一種向后

備存儲器寫入字節(jié)和從后備存儲器讀取字節(jié)的方式,后備存儲器可認為多種存儲媒介之一。

正如除磁盤外存在多種后備存儲器同樣,除文獻流之外也存在多種流。例如,還存在網絡流、

內存流和磁帶流等。

13.程序集與命名空間有什么不同?

命名空間是用于避免命名沖突,專用于組織代碼,當代碼要在其他某個應用程序中重用時,可

以減少復雜性。

程序集是重用代碼的一種方式

不同:可以將相同命名空間中的類部署到不同的程序集中,也可以命名空間中的類部署到一

個程序集中

命名空間程序集

有邏輯編譯時機制有物理編譯時機制

不是運營時實體是運營時實體

為源代碼元素的名稱提供邏輯結構為可執(zhí)行文獻的運營時提供物理結構

14.請編寫一個捕獲所有錯誤的錯誤解決代碼

15.

16.Try{

17.…

18.)catch(Exceptione){}

19.委托與事件是什么關系?為什么要使用委托

?委托提供了封裝方法的方式,事件是某動作己發(fā)生的說明,事件是建立于委托之上的

?程序運營時同一個委托可以用來調用不同的方法只要改變它的引用方法即可

?同一個委托可以用來調用不同的方法,只要改變它引用的方法即可,因此委托調節(jié)器用的方

法不是在編譯時決定的,而是在運營時擬定的.

20.一個類中有幾種元素?

類由字段,屬性,方法組成

21.請解釋這種語法現(xiàn)象Session["name"]=20;

給類的索引器賦值.

22.裝箱與取消裝箱是什么含義?

裝箱是值類型到object類型或到該值類型所實現(xiàn)的任何接口類型的隱式轉換。將一個值的

值裝箱會分派一個對象實例并將該值復制到新的對象中。

取消裝箱是從object類型到值類型或從接口類型到實現(xiàn)該接口的值類型的顯式轉換。取消

裝箱操作涉及:

?檢核對象實例,保證它是給定值類型的一個裝箱值。

?將該值從實例復制到值類型變量中。

23.一個構造函數(shù)能否調用另一個構造函數(shù),假如能請寫出簡樸的代碼

能.

classclass1

(

inty;

publicclass1(){

newclass1(5);

)

publicclass1(inti)

(

this.y=i;

)

publicvoidx(){

Console.WriteLine(y.ToStringO);

)

staticvoidMain(stringlJargs)

//

class1cl=newclass1(5);

cl.x();

)

1

24.請編寫創(chuàng)建一個線程的代碼。

usingSystem;

usingSystem.IO;

usingSystem.Threading;

classMyThread{

publicintcount;

stringthrdName;

publicMyThread(stringname){

count=0;

thrdName=name;

)

publicvoidrun(){

Console.WriteLine(thrdName+"starting.n);

do{

Thread.Sleep(500);

Console.WriteLine("In',4-thrdName+u,countis"+count);

count++;

}while(count<10);

Console.WriteLine(thrdName+nterminating.n);

classMultiThread{

publicstaticvoidMain(){

Console.WriteLine("Mainthreadstarting.");

MyThreadmt=newMyThread("Child#ln);

ThreadnewThrd=newThread(newThreadStart(mt.run));

newThrd.Start();

do{

Console.Write(n.0);

Thread.Sleep(l00);

}while(mt.count!=l0);

Console.WriteLine(uMainthreadending.");

)

)

25.Params是什么含義?

params關鍵字可以指定在參數(shù)數(shù)目可變處采用參數(shù)的方法參數(shù)。在方法聲明中的params

關鍵字之后不允許任何其他參數(shù),并且在方法聲明中只允許一個params關鍵字。

26.C#中有沒有運算符重載?能否使用指針?

?重載操作符意味著使該操作符具有不同的行為

?使用操作符可以使方程式簡樸易懂

?重載運算符使用operator關鍵字來創(chuàng)建一個運算符方法

能使用指針,在C#中很少需要使用指針,但仍有一些需要使用的情況。例如,在下列情況

中使用允許采用指針的不安全上下文是對的的:

?解決磁盤上的現(xiàn)有結構

9涉及內部包含指針的結構的高級COM或平臺調用方案

?性能關鍵代碼

不鼓勵在其他情況下使用不安全上下文。具體地說,不應當使用不安全上下文嘗試在C#中

編寫C代碼。

27.C#中有很多類被定義為public有什么意義?

Public關鍵字將公共訪問權限授予一個或多個被聲明的編程元素。對公共元素的可訪問性

沒有限制。

28.Internal修飾符有什么含義?

internal關鍵字是類型和類型成員的訪問修飾符。內部成員只有在同一程序集中的文獻內才

是可訪問的。內部訪問通常用于基于組件的開發(fā),由于它使一組組件可以以私有方式進行合

作,而不必向應用程序代碼的其余部分公開。例如,用于生成圖形用戶界面的框架可以提供

“控件”類和“窗體”類,這些類通過使用品有內部訪問能力的成員進行合作。由于這些成

員是內部的,它們不向正在使用框架的代碼公開。在定義具有內部訪問能力的成員的程序集

外部引用該成員是錯誤的。

29.JAVA的代碼是半編譯半解釋的C#的代碼是否也是這樣

C#源碼通過語言編譯器執(zhí)行第一次編譯,變?yōu)橹虚g語言,然后再由CLR編譯成可

執(zhí)行代碼.

30.私有程序集與共享程序集有什么區(qū)別?

私有程序集:

?默認情況下,C#程序編譯為私有程序集

?需要放在應用程序所在的文獻夾中

?程序集的名稱在應用程序中應當是唯一的

共享程序集:

?可以被不同的應用程序共享

?在所有使用程序集的應用程序中,程序集名稱應當是唯一的

?放在全局程序集緩存中

31.請解釋進程與線程的區(qū)別?進程與程序的區(qū)別?

用最簡短的話來說,進程就是當前運營的應用程序。線程是操作系統(tǒng)向其分派解決器時間的

基本單位。線程可執(zhí)行進程的任何一部分代碼,涉及當前由另一線程執(zhí)行的部分。

32.CLR與IL分別是什么含義?

CLR(公共語言運營庫):能管理內存,可以輕松地設計其對象可以跨語言互動的組件和應用程

序,編譯一次,并可以在任何支持運營庫的CPU和操作系統(tǒng)上運營,跨語言集成(特別是

跨語言繼承)

IL(中間語言):可用于語言互操作性,IL不是字節(jié)代碼,但很接近字節(jié)代碼,因此執(zhí)行應用

程序時,IL到機器代碼的轉換要快很多。獨立于CPU的指令集。由CLR轉換為特定于CPU

的代碼。

33.對象能否調用靜態(tài)方法

對象能調用靜態(tài)方法。

34.請說明如下代碼的結果

classFather{

voidshow(){

Console.Write("Father");

)

staticvoidMain(stringlJargs){

Fatherobj=newChild();

obj.show();

classChild:Father{

voidshow(){

Console.Write("Child");

)

)

執(zhí)行結果為:Father.

二、ASP.NET

1.ASP.NET中的身份驗證有那些?請解釋。

(1)Windows驗證:指定Windows身份驗證作為默認的身份驗證模式.假如是任何形式的

Internet信息服務(HS)身份驗證,則使用此模式.

(2)Forms驗證:指定基于ASP。NET窗體的身份驗證作為默認的身份驗證模式。

⑶Passport:指定MicrosoftPassport身份驗證作為默認的身份驗證模式。

(4)None:不指定身份驗證,僅合用于匿名用戶,或者應用程序可以解決事件以提供它們自

己的身份驗證情況。

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

WEB控件是能拖放在WEB頁面上的控件

WEB控件分為:內部控件,列表控件,復雜控件,驗證控件

?WEB控件優(yōu)勢:Web控件是對象

-與對象同樣,Web控件擁有方法和屬性,并且響應事件

-一旦將Web控件涉及在Web頁中,就可以設立其屬性并調用其方法

-可認為Web控件編寫服務器端代碼以響應在客戶端上發(fā)生的事件

3.請解釋ASP。NET中以什么方式進行數(shù)據驗證?

是以驗證控件進行數(shù)據驗證的。

4.請談談對正則表達式的見解?

能將一些比較復雜的驗證邏輯以簡樸的驗證表達式驗證.

5.ASP,NET中共有幾種類型的控件?各有什么區(qū)別?

WEB控件分為:內部控件,列表控件,復雜控件,驗證控件

內部控件-內部控件的使用方法與HTML控件相同,它們映射到HTML元素并通過使用

runat="server"屬性在服務器上執(zhí)行

列表控件-用于在Web頁中創(chuàng)建數(shù)據列表

復雜控件--?當希望控件擁有復雜的功能或使用HTML元素無法創(chuàng)建的功能豐富的用戶界

面時,可以使用復雜控件

驗證控件-輸入控件的數(shù)據需要進行準確性和取值范圍方面的檢查

6.WEB控件可以激發(fā)服務端事件,請談談服務端事件是怎么發(fā)生并解釋其原理?自動傳

回是什么?為什么要使用自動傳回。

由于ASP。NET是Web頁面和服務端分離的,因此要產生了服務端事件.

?使用一doPostBack函數(shù)可以自動地把客戶端的javascript事件轉變?yōu)橐粋€服務器端的事件

?A框架自動為我們解決有關的細節(jié)簡化工作

使用自動傳回的特性:在檢測到一個特定用戶動作時,自動傳回可以將這個頁面?zhèn)骰胤?/p>

務器以解決事件.

7.WEB控件及HTML服務端控件能否調用客戶端方法?假如能,請解釋如何調用?

8.ASPoNET與ASP相比有什么優(yōu)勢?

ASP的缺陷:

(1)VBScript和JavaScript是在ASP中僅可使用的兩種腳本語言。它們是基本的非類型化語

言.在ASP中不能使用強類型語言.

(2)ASP頁面需要解釋,使得它執(zhí)行速度較慢。

(3)ASP頁面非常凌亂。

(4)在使用ASP創(chuàng)建WEB應用程序時,程序員和設計人員必須在同一文獻上一起工作。

(5)在ASP中,必須通過編寫代碼來提供所需的任何功能。

(6)在ASP中沒有對代碼給予太多的關注。

(7)在ASP中沒有調試機制。

(8)在ASP中。必須停止WEB服務器才干安裝DLL的新版本,并且在應用程序中使用DLL

的新版本之前,必須先在注冊表中注冊它,并且,DLL注冊過程非常復雜。

ASP.NET的優(yōu)點:

(1)ASPoNET中支持強類型語言.

(2)ASP。NET頁將被編譯而不是解釋,這樣它們的執(zhí)行速度就比ASP頁快。

(3)ASP。NET提供聲明性服務器控件。

(4)ASP。NET通過繼承機制來支持代碼的重用。

(5)ASP。NET具有Trace的內置方法,可以幫助對頁面進行調試。

(6)在ASP。NET中,置于應用程序的BIN目錄中的任何組件將自動相應用程序可用.

9.請解釋web.config文獻中的重要節(jié)點

動態(tài)調試編譯—<compilation/>,自定義錯誤信息—<customErrors/>,身份驗證一

<authenlication/>,授權--〈authorization/〉,應用程序級別跟蹤記錄-<lrace/>,會話狀態(tài)設立

--<sessionState/>,全球化--〈globalization/〉

10.請解釋ASP。NET中的web頁面與其隱藏類之間的關系?

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

12.請解釋該錯誤

13.當發(fā)現(xiàn)不能讀取頁面上的輸入的數(shù)據時很有也許是什么因素導致的?怎么解決

14.請解釋一個WEB頁面中代碼執(zhí)行順序。

15.請解釋什么是上下文對象,在什么情況下要使用上下文對象

16.請解釋轉發(fā)與跳轉的區(qū)別?

17.請解釋ASP.NET中不同頁面之間數(shù)據傳遞有那些方式?

18.請解釋ASP。NET中buttonlinkbuttonimagebutton及hyperlink這四個控件之

間的區(qū)別

19.請解釋一下。NET多層應用程序中層與層之間以那幾種方式進行數(shù)據傳遞。并解

釋你自己的項目中采用那種方式進行。

20.假如出現(xiàn)ASP。NET中的事件不能觸發(fā)也許由于什么因素導致?請列舉至少兩個

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

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

23.請以圖示方式解釋ADO。NET的對象模型。

24.請解釋webService?如何實現(xiàn)webService。

25.假如用dataSet提交數(shù)據請編寫實現(xiàn)代碼?

26.DataList能否分頁,請問如何實現(xiàn)?

27.請列舉DataSet中的了對象?

28.請分別比較JDBCADOADO.NET并說明三者之間的異同點及優(yōu)勢

29.請解釋這個正則表達式“[AB][TJG]n-3][QSW]\d{4}”

30.在ASP.NET中如何進行文獻上傳?

簡要地寫出一個.NETRemoting的示例

【考點】

.NETRemoting程序的原理,.NETRemoting的基本編寫方法。

【出現(xiàn)頻率】

★★☆☆☆

【解答】

在VS2023中添加新的類庫項目,并命名為NetRmClass,將所屬解決方案命名為NetRm,

勾選“創(chuàng)建解決方案的目錄”。這樣,NetRmClass類庫項目目錄即屬于NetRm解決方案,

并可以繼續(xù)向該解決方案添加更多的其他相關項目。類庫項目在這里僅用于創(chuàng)建一個遠程對

象的類,將項目中的cs文獻命名為RmObj,其包含的類型同樣為RmObj,編寫RmObj.cs

如代碼13.4所示。

代碼13.4遠程對象類定義:RmObj.cs

usingSystem;

usingSystem.Windows.Forms;

namespaceNetRmClass

(

publicclassRmObj:MarshalByRefObject

(

〃在構造函數(shù)中,用提醒窗口提醒雙方用戶遠程對象創(chuàng)建成功

publicRmObj()

{

MessageBox.Show(“遠程對象已經倉U建","提醒信息”);

//調用Diss方法,會在服務器端的控制臺程序中輸出方法參數(shù)

publicvoidDiss(stringmsg)

Console.WriteLine("客戶端信息:"+msg);

〃該方法可返回字符串

publicstringDisc()

return”與服務器端完畢通信”;

將NetRm解決方案中的NetRmClass項目進行編譯(VS2023中選擇菜單欄的“項目|生成”

命令,快捷鍵為Crtl+F6),即可在該項目目錄中的“bin\Debug”途徑下生成編譯后的

NetRmClass.dll程序集。

在VS2023中的NetRm解決方案再次添加新的控制臺應用程序項目,并命名為NetRmServer。

該項目所生成的程序集作為Remoting的服務器端,一方面需要添加“NelRmClass.dll”程序

集引用,并導入NetRmClass命名空間,編寫該項目的Program.cs如代碼13.5所示。

代碼13.5Remoting服務器端程序:Program.cs

usingSystem;

usingSystem.Runtime.Remoting;

usingSystem.Runtime.Remoting.Channels;

usingSystem.Runtime.Remoting.Channels.Tcp;

usingNetRmClass;

namespaceNetRmServer

classProgram

〃聲明TcpServerChannel類型的靜態(tài)字段channels

staticTcpServerChannelchannels;

staticvoidMain(slring[]args)

(

//創(chuàng)建新的TcpServerChannel對象,端標語為3000,引用為channels

channels=newTcpServerChannel(3000);

〃將channels注冊到信道服務

ChannelServices.RegisterChannel(channels,false);

〃創(chuàng)建知名服務類型的對象,傳遞遠程對象的類型、對象URI和激活對象的枚

舉成員

RemotingConfiguration.RegisterWellKnownServiceType(typeof(RmObj),uMyUri",

WellKnownObjectMode.Singleton);

〃信息提醒,當用戶輸入字符,則結束程序

Console.WriteLine("二二二二二二服務器端己啟動=====");

Console.ReadQ;

添加“NetRmClass.dll”程序集引用后,該程序集的副本即被復制到NelRmServer項目目錄

中的“bin'Debug”途徑下,以供NetRmServer項目生成的程序集使用。將NetRm解決方案

中的NetRmServer項目進行編譯,即可在該項目目錄中的“bin'Debug”途徑下生成編譯后

的NetRmServer.exe程序集。

在VS2023中的NetRm解決方案再次添加新的Windows窗體應用程序項目,并命名為

NetRmClientc該項目所生成的程序集作為Remoting的客戶端,一方面仍然需要添加

“NetRmClass.dll”程序集引用,并導入NetRmClass命名空間。在“Forml”窗體的設計視

圖中添加一個Button控件和TextBox控件,分別命名為“button1”和“textBox1”,編寫Forml.cs

如代碼13.6所示。

代碼13.6Remoting客戶端程序:Forml.cs

usingSystem;

usingSystem.Windows.Forms;

usingSystem.Runtime.Remoting.Channels;

usingSystem.Runtime.Remoting.Channels.Tcp;

usingNetRmClass;

namespaceNetRmClient

(

publicpartialclassForml:Form

(

〃聲明TcpClientChannel類型的字段channelc

TcpClientChannelchannelc;

〃聲明RmObj類型的字段obj

RmObjobj;

publicForm1()

InitializeComponent();

privatevoidForm1_Load(objectsender,EventArgse)

〃創(chuàng)建TcpClientChannel對象,引用為channelc

channelc=newTcpClientChannel();

〃將channels注冊到信道服務

ChannelServices.RegisterChannel(channelc,false);

〃創(chuàng)建遠程對象

obj=(RmObj)Activator.GetObject(typeof(RmObj),"tcp://localhost:3000/MyUrin);

)

privatevoidbutton1_Click(objectsender,EventArgse)

(

stringMyName=textBox1.Text;

〃調用遠程對象的Diss方法,并傳遞用戶輸入值

obj.Diss(MyName);

〃調用遠程對象的Disc方法,返回值賦值給textBox1控件的“Text”屬性

this.textBox1.Text=obj.Disc();

)

)

);

添加“NetRmClass.dll”程序集引用后,該程序集的副本同樣被復制到NetRmClient項目目

錄中的“bin\Debug”途徑下,以供NetRmClient項目生成的程序集使用。將NetRm解決方

案中的NetRmClient項目進行編譯,即可在該項目目錄中的“bin'Debug”途徑下生成編譯

后的NetRmClient.exe程序集。

至此,一個簡樸的.NETRemoting應用解決方案已完畢,其中服務器端為控制臺程序,客戶

端為Windows窗體程序。服務器端所指定的位置是“l(fā)ocalhost",也可以根據程序需要更改

為IP地址。

【分析】

本題重要考察面試者對Remoting應用原理的結識,該解答并不適宜于直接應用于實際開發(fā)。

當服務器端程序運營后(即運營NetRmServer.exe),用戶在客戶端程序中輸入一些文本,并

單擊“button」’按鈕,服務器端程序和客戶端程序運營效果如圖13.4所示。

圖13.4.NETRemoting應用示例

解答所編寫的.NETRemoting應用用于在本機上測試,但是己經展示了.NETRemoting技術

的基本編寫方法。通過示例,可以清楚理解該技術的強大功能以及靈活性,但是需要編程者

編寫大量的代碼,并且需要一致的運營環(huán)境支撐。

WCF技術有什么優(yōu)勢

【考點】

對WCF技術的了解,WCF技術的基本內容。

【出現(xiàn)頻率】

★★☆☆☆

【解答】

常用的分布式技術有COM+、.NET遠程技術(Remoting)、WebService和微軟消息隊列服

務,WCF技術將這些分布式技術整合為一個高效的API。常用的那些分布式技術只能解決

項目開發(fā)中某個方面的問題,并且不同技術對平臺規(guī)定不同。在項目中有時要使用到多種技

術從而導致這些技術所提供的服務有重疊之處,并且整個項目的維護復雜性大大增長。WCF

技術提供了一個完整統(tǒng)一的方案解決這些問題,它提供了一個用于訪問各種分布式技術的通

用API,并且增長了很多必要的服務。

【分析】

本題重要考察面試者對.NETFramework新版本中WCF技術的基本認知。公司招聘.NET程

序員不一定非要純熟掌握WCF這樣的新技術,但是一定會規(guī)定所招聘的人才具有對新技術

的了解,對新技術探索的好奇心。本題即為這樣的目的而設,難度不大,只要面試者對新技

術有一定限度的了解,通過短時間的培訓即可掌握,其考察重點在于面試者的知識廣度。

.NETRemoting和WebService有什么異同

【考點】

.NETRemoting技術相對于WebService的優(yōu)勢和劣勢.

【出現(xiàn)頻率】

★★★☆☆

【解答】

qRemoting技術可以靈活地定義其所基于的協(xié)議,比如HTTP協(xié)議和TCP協(xié)議。在實

際開發(fā)中,Remoting一般使用TCP協(xié)議,這樣可保證在保持狀態(tài)的情況下,獲取比Web

Service更好的性能,而WebService默認情況下是沒有狀態(tài)的。

qRemoting技術不是行業(yè)標準,而WebService是行業(yè)標準,并也許成為下一代網絡

數(shù)據互換的核心組成部分。

qRemoting技術可用.NET的Windows窗體程序或Windows服務進行啟動,也可以使

用IIS部署,而WebService則必須通過IIS之類的服務啟動。

q在VS2023等.NET開發(fā)環(huán)境中,專門對WebService的調用進行了封裝,可以直接

通過添加Web引用或服務引用調用WebService,節(jié)約大量代碼。而Remoting需要編寫更

多代碼,開發(fā)效率較低。

q.NETRemoting的通信規(guī)定雙方運營相同的平臺框架,如.NETRemoting需要客戶端

和服務器端安裝.NETFramework。而WebService是平臺獨立的,可跨語言(支持XML的

語言)互動。

【分析】

本題考察面試者的數(shù)據庫相關的ASP.NET開發(fā)經驗,.NETRemoting與WebService有所不

同,Remoting技術支持HTTP以及TCP信道,并且不僅能傳輸XML格式的SOAP包,也

可以傳輸傳統(tǒng)意義上的二進制流,這使得Remoting效率更高也更加靈活。Remoting不依賴

于IIS,服務器端和客戶端可以非常靈活地部署。從某些方面上來講WebService其實上

是.NETRemoting的一種特例。

【考點】

創(chuàng)建WebService的基本代碼。

【出現(xiàn)頻率】

★★★☆☆

【解答】

在VS2023中添加新的WEB服務代碼模板到WebSvRm項目,并命名為MyWebSv.asmXo

這個代碼文獻實際已經具有了WebService的基本代碼結構,這里編寫一個能將小寫字母轉

換為大寫字母的WebService應用。一方面編寫MyWebSv.asmx.cs如代碼13.1所示。

代碼13.1轉換大寫字母的WebService:MyWebSv.asmx.es

usingSystem;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Services;

usingSystem.Web.Services.Protocols;

usingSystem.Xml.Linq;

namespaceWebSvRm

(

〃默認命名空間的指定

lWebService(Namespace="")]

(WebServiceBinding(ConformsTo=WsiProfiles.BasicProfilel_l)]

publicclassMyWebSv:System.Web.Services.WebService

〃聲明WebMethod特性,該方法才可以被訪問

[WebMethod]

publicstringConvertWord(stringword)

(

returnword.ToUpperlnvariant();

)

)

)

然后在WebSvRm項目中添加WEB引用,地址為uhttp://localhost/MyWebSv.asmx",這時項

目目錄下將生成WebReferences目錄,這個目錄包具有l(wèi)ocalhost子目錄。然后在WebSvRm

項目的默認首頁,即Default.aspx中調用WebService以輸出結果,一方面編寫Default.aspx

如代碼13.2所示。

代碼13.2調用WebService的頁面:Default.aspx

<%@PageLanguage=,'C#"AutoEventWireup=,,true"CodeBehind=',Default.aspx.cs"

Inherits=,,WebSvRm._Default"%>

<!DOCTYPEhtmlPUBLICM-//W3C//DTDXHTML1.0Transitional//EN'>

<htmlxmlns=,H,>

<headrunat="server">

調用WebService</title>

</head>

<body>

<formid="formr,runat=,,servern>

<div>

請輸入需要轉換大寫字母的初始字母或單詞:<asp:TextBoxrunat="server"

ID=ninput"x/asp:TextBox>

<asp:Buttonrunat="server”ID二“btn”Text="開始轉換”/>

<hr/>

調

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論