計(jì)算機(jī)NET招聘面試題大全,包括微軟、華為、中興等大企業(yè)的面試真題_第1頁(yè)
計(jì)算機(jī)NET招聘面試題大全,包括微軟、華為、中興等大企業(yè)的面試真題_第2頁(yè)
計(jì)算機(jī)NET招聘面試題大全,包括微軟、華為、中興等大企業(yè)的面試真題_第3頁(yè)
計(jì)算機(jī)NET招聘面試題大全,包括微軟、華為、中興等大企業(yè)的面試真題_第4頁(yè)
計(jì)算機(jī)NET招聘面試題大全,包括微軟、華為、中興等大企業(yè)的面試真題_第5頁(yè)
已閱讀5頁(yè),還剩105頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

NET面試題大全,包括微軟、華為、中興等大企業(yè)的面試真

簡(jiǎn)要地寫出一個(gè).NETRemoting的示例

【考點(diǎn)】

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

【出現(xiàn)頻率】

★★☆☆☆

【解答】

在VS2008中添加新的類庫(kù)項(xiàng)目,并命名為NctRmClass,將所屬解決方案命名為NctRm,

勾選“創(chuàng)建解決方案的目錄這樣,NeiRmClass類庫(kù)項(xiàng)目目錄即屬于Ne【Rm解決方案,并

可以繼續(xù)向該解決方案添加更多的其他相關(guān)項(xiàng)目。類庫(kù)項(xiàng)目在這里僅月于創(chuàng)建一個(gè)遠(yuǎn)程對(duì)象

的類,將項(xiàng)目中的cs文件命名為RmObj,其包含的類型同樣為RmObj,編寫RmObj.cs如

代碼13.4所示。

代碼13.4遠(yuǎn)程對(duì)象類定義:Rn-iObj.cs

usingSystem;

usingSystem.Windows.Forms;

namespaceNetRmClass

publicclassRmObj:MarshalByRefObject

〃在構(gòu)造函數(shù)中,用提示窗口提示雙方用戶遠(yuǎn)程對(duì)象創(chuàng)建成功

publicRmObjO

MessageBox.Show("遠(yuǎn)程對(duì)象已經(jīng)創(chuàng)建","提示信息");

〃調(diào)用Diss方法,會(huì)在服務(wù)器端的控制臺(tái)程序中輸出方法參數(shù)

publicvoidDiss(stringmsg)

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

〃該方法可返回字符串

publicstringDisc()

return”與服務(wù)器端完成通信”;

}

將NeiRm解決方案中的NciRmClass項(xiàng)目進(jìn)行編譯(VS2008中選擇菜單欄的“項(xiàng)目|生成”

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

NetRmClass.dll程序集。

在VS2008中的NeiRm解決方案再次添加新的控制臺(tái)應(yīng)用程序項(xiàng)目,并命名為NelRmServer。

該項(xiàng)目所生成的程序集作為Remoting的服務(wù)器端,首先需要添加“NeRmClassd『程序集引

用,并導(dǎo)入NetRmClass命名空間,編寫該項(xiàng)目的Program.cs如代碼13.5所示。

代碼13.5Remoling服務(wù)器端程序:Program.cs

usingSystem;

usingSystem.Runlime.Remoting;

usingSystem.Runtime.Remoting.Channels;

usingSystem.Runtime.Remoting.Channels.Tcp;

usingNetRmClass;

namespaceNetRmServer

{

classProgram

(

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

staticTcpServerChannelchannels;

staticvoidMain(string[]args)

(

〃創(chuàng)建新的TcpServerChannel對(duì)象,端口號(hào)為3000,引用為channels

channels=newTcpServerChannel(3000);

〃將channels注冊(cè)到信道服務(wù)

ChannelServices.RegisterChannel(channels,false);

〃創(chuàng)建知名服務(wù)類型的對(duì)象,傳遞遠(yuǎn)程對(duì)象的類型、對(duì)象URI和激活對(duì)象的枚舉成

RcmotingConfiguration.RcgistcrWcllKnownScrviccTypc(typcof(RmObj),"MyUri",

WellKnownObjectMode.Singleton);

〃信息提示,當(dāng)用戶輸入字符,則結(jié)束程序

Console.WriteLine("=====月艮務(wù)器端已啟動(dòng)======");

Console.Read();

)

添加“NetRmClass.dll”程序集引用后,該程序集的副本即被復(fù)制到NetRmServer項(xiàng)目目錄中

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

NetRmServer項(xiàng)目進(jìn)行編譯,即可在該項(xiàng)目目錄中的“binXDebug”路徑下生成編譯后的

NctRmScrvcr.exe程序集。

2

在VS2008中的NetRm解決方案再次添加新的Windows窗體應(yīng)月程序項(xiàng)目,并命名為

NetRmCliento該項(xiàng)目所生成的程序集作為Remoting的客戶端,首先仍然需要添加

“NeiRmClass.dll”程序集引用,并導(dǎo)入NeiRmClass命名空間。在“Form1”窗體的設(shè)計(jì)視圖中

添加一個(gè)Button控件和TextBox控件,分另ij命名為"buttonl"和"textBoxl”,編寫Form1.cs

如代碼13.6所示。

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

usingSystem;

usingSystem.Windows.Forms;

usingSystem.Runlime.Remoting.Channels;

usingSystem.Runtime.Remoting.Channels.Tcp;

usingNetRmClass;

namespaceNetRmClient

{

publicpartialclassForm1:Form

{

〃聲明TcpClientChannel類型的字段channelc

TcpClientChannelchannelc;

〃聲明RmObj類型的字段obj

RmObjobj;

publicForm1()

(

InitializcComponcnt();

I

privatevoidForm1_Load(objectsender,EventArgse)

(

〃創(chuàng)建TcpClientChannel對(duì)象,引用為channclc

channelc=newTcpClientChannelO;

〃將channels注冊(cè)到信道服務(wù)

ChannelServices.RegisterChannel(channeic,false);

〃創(chuàng)建遠(yuǎn)程對(duì)象

obj=(RmObj)Activator.GetObject(typeof(RmObj),"tcp://localhost:3(XX)/MyUri,');

1

privatevoidbuttonl_Click(objectsender,EventArgse)

(

stringMyName=textBoxl.Text;

〃調(diào)用遠(yuǎn)程對(duì)象的Diss方法,并傳遞用戶輸入值

obj.Diss(MyName);

〃調(diào)用遠(yuǎn)程對(duì)象的Disc方法,返回值賦值給textBoxl控件的“Text”屬性

3

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

};

添力rNetRmClass.dn”程序集引用后,該程序集的副本同樣被復(fù)制到NetRmCIicnt項(xiàng)目目錄

中的“bin\Debug”路徑下,以供NetRmClienl項(xiàng)目生成的程序集使用。將NetRm解決方案中

的NetRmClient項(xiàng)目進(jìn)行編譯,即可在該項(xiàng)目目錄中的“binXDebug”路徑下生成編譯后的

NetRmClient.exe程序集。

至此,一個(gè)簡(jiǎn)單的.NETRemoting應(yīng)用解決方案已完成,其中服務(wù)器端為控制臺(tái)程序,客戶

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

IP地址。

【分析】

本題主要考查面試者對(duì)Remoting應(yīng)用原理的認(rèn)識(shí),該解答并不適宜于直接應(yīng)用于實(shí)際開發(fā)。

當(dāng)服務(wù)器端程序運(yùn)行后(即運(yùn)行NetRmServer.exe),用戶在客戶端程序中輸入一些文本,并

單擊“bultonl”按鈕,服務(wù)器端程序和客戶端程序運(yùn)行效果如圖13.4所示。

圖13.4.NETRemoting應(yīng)用示例

解答所編寫的.NETRemoting應(yīng)用用于在本機(jī)上測(cè)試,不過(guò)已經(jīng)展示/.NETRemoting技術(shù)

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

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

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

【考點(diǎn)】

對(duì)WCF技術(shù)的了解,WCF技術(shù)的基本內(nèi)容。

【出現(xiàn)頻率】

★★☆☆☆

【解答】

常用的分布式技術(shù)有COM+、.NET遠(yuǎn)程技術(shù)(Remoting)、WebService和微軟消息隊(duì)

列服務(wù),WCF技術(shù)將這些分布式技術(shù)整合為一個(gè)高效的APL常用的那些分布式技術(shù)只能

解決項(xiàng)目開發(fā)中某個(gè)方面的問(wèn)題,并且不同技術(shù)對(duì)平臺(tái)要求不同。在項(xiàng)目中有時(shí)要使用到多

種技術(shù)從而導(dǎo)致這些技術(shù)所提供的服務(wù)有重疊之處,并且整個(gè)項(xiàng)目的維護(hù)復(fù)雜性大大增加。

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

術(shù)的通用API,并且增加了很多必要的服務(wù)。

【分析】

本題主要考查面試者對(duì).NETFramework新版本中WCF技術(shù)的基本認(rèn)知。公司招聘.NET

程序員不一定非要熟練掌握WCF這樣的新技術(shù),但是一定會(huì)要求所招聘的人才具備對(duì)新技

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

技術(shù)有一定程度的了解,經(jīng)過(guò)短時(shí)間的培訓(xùn)即可掌握,其考查重點(diǎn)在于面試者的知識(shí)廣度。

.NETRemoting和WebService有什么異同

【考點(diǎn)】

.NETRemoting技術(shù)相對(duì)于WebService的優(yōu)勢(shì)和劣勢(shì)。

【出現(xiàn)頻率】

★★★☆☆

4

【解答】

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

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

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

qRemoting技術(shù)不是行業(yè)標(biāo)準(zhǔn),而WebService是行業(yè)標(biāo)準(zhǔn),并可能成為下一代網(wǎng)絡(luò)

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

qRemoting技術(shù)可用.NET的Windows窗體程序或Windows服務(wù)進(jìn)行啟動(dòng),也可以

使用IIS部署,而WebService則必須通過(guò)IIS之類的服務(wù)啟動(dòng)。

q在VS2008等.NET開發(fā)環(huán)境中,專門對(duì)WebService的調(diào)用進(jìn)行了封裝,可以直

接通過(guò)添加Web引用或服務(wù)引用調(diào)用WebService,節(jié)約大量代碼,而Remoting需要編

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

q.NETRemoting的通信要求雙方運(yùn)行相同的平臺(tái)框架,如I.NETRemoting需要客戶

端和服務(wù)器端安裝.NETFrameworko而WebService是平臺(tái)獨(dú)立的,可跨語(yǔ)言(支持XM

L的語(yǔ)言)互動(dòng)。

【分析】

本題考查面試者的數(shù)據(jù)庫(kù)相關(guān)的ASP.NET開發(fā)經(jīng)驗(yàn),.NETRemoting與WebService有所

不同,Remoting技術(shù)支持HTTP以及TCP信道,而且不僅能傳輸XML格式的SOAP包,

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

依賴于IIS,服務(wù)器端和客戶端可以非常靈活地部署。從某些方面上來(lái)講WebService其實(shí)

上是.NETRemoting的一種特例。

【考點(diǎn)】

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

【出現(xiàn)頻率】

★★★☆☆

【解答】

在VS2008中添加新的WEB服務(wù)代碼模板到WebSvRm項(xiàng)目,并命名為MyWebSv.asmXo

這個(gè)代碼文件實(shí)際已經(jīng)具備了WebService的基本代碼結(jié)構(gòu),這里編寫一個(gè)能將小寫字母

轉(zhuǎn)換為大寫字母的WebService應(yīng)用。首先編寫MyWebSv.asmx.cs如代碼13.1所示。

代碼13.1轉(zhuǎn)換大寫字母的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

〃默認(rèn)命名空間的指定

5

[WebService(Namespace="/")]

[WebServiceBinding(Conforrrs7b=WsiProfiles.BasicProfile1_1)|

publicclassMyWebSv:Sysleni.Web.Services.WebService

(

〃聲明WebMethod特性,該方法才可以被訪問(wèn)

[WebMethod]

publicstringConvertWordistringword)

(

returnword.ToUpperlnvariant();

)

)

)

然后在WebSvRm項(xiàng)目中添加WEB弓I用,地址為“http:〃localhost/MyWebSv.asmx",這時(shí)

項(xiàng)目目錄下將生成WebReferences目錄,這個(gè)目錄包含有l(wèi)ocalhost子目錄。然后在

WebSvRm項(xiàng)目的默認(rèn)首頁(yè),即Defaidt.aspx中調(diào)用WebService以輸出結(jié)果,首先編寫

Default.aspx如代碼13.2所示。

代碼13.2調(diào)用WebService的頁(yè)面:Default.aspx

<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.csH

Inherits="WebSvRm._Default"%>

<!DOCTYPEhtmlPUBLICM-//W3C//DTDXHTML1.0Transitional//ENM

"/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="/1999/xhtml">

<headrunat="server">

vtitle>調(diào)用WebService</title>

</head>

<body>

<formid="form1"runat="scrvcr">

<div>

請(qǐng)輸入需要轉(zhuǎn)換大寫字母的初始字母或單詞:vasp:TextBoxrunat="server"

ID="input"x/asp:TextBox>

<asp:Buttonrunat="server"ID="btn"Text="開始轉(zhuǎn)換"/>

<hr/>

調(diào)用WebService所返回的結(jié)果:vaspTabeirunat="server"ID="output"x/asp

abel>

</div>

</form>

</body>

</html>

最后編寫Default.aspx.es如代碼13.3所示。

6

代碼13.3調(diào)用WebService的邏輯代碼:Defaultaspx.cs

usingSystem;

usingSystem.Collections;

usingSystem.Configuration;

usingSystem.Data;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.Ul.HtmIControls;

usingSystem.Web.Ul.WebControls;

usingSystem.Web.Ul.WebControls.WebParts;

usingSystem.Xml.Linq;

namespaceWebSvRm

(

publicpartialclass_Default:System.Web.Ul.Page

(

protectedvoidbtn_Click(objectsender,EventArgse)

(

〃獲取用戶輸入值

stringtxt1=this.input.Text;

〃創(chuàng)建MyWebSv對(duì)象,引用為WebSvl

localhost.MyWebSvWebSvl=newlocalhost.MyWebSv():

〃調(diào)用WebSvl方法,并傳遞txt1變量,返回值賦值給txt2

stringtxt2=WebSvl.ConvertWord(txt1);

〃將txt2賦值給output控件的“Tbxt”屬性值

this.output.Text=txt2;

)

)

)

打開IE瀏覽器,在瀏覽器地址欄輸入“http://localhostZSendHtml.aspx",并輸入

"microsoft.netframework”到TextBox控件中,然后單擊“開始轉(zhuǎn)換”按鈕,頁(yè)面運(yùn)行效果如

圖13.2所示。

圖13.2WebService調(diào)用實(shí)例

【分析】

本題考查面試者利用VS2008等開發(fā)環(huán)境創(chuàng)建WebService應(yīng)用的基本方法,因?yàn)槭腔?/p>

方法,所以不涉及太多概念。實(shí)際上,用該方法創(chuàng)建WebService應(yīng)用最為簡(jiǎn)便,其中很

多工作已經(jīng)被VS2008等開發(fā)環(huán)境封裝,對(duì)于很多編程者,這些細(xì)節(jié)部分是透明的。解答

中所創(chuàng)建的WebService方法非常簡(jiǎn)單,在調(diào)用WebService方法時(shí),直接添加WEB引

用即可。打開添加WEB引用時(shí)自動(dòng)創(chuàng)建的localhost目錄,如圖13.3所示。

7

圖13.3添加WEB引用后生成的文件

可見,VS2008的確做了很多工作,自動(dòng)創(chuàng)建了4個(gè)文件,其中MyWebSv.disco文件用于

WebService的靜態(tài)發(fā)現(xiàn)服務(wù),即使用DISCO定位。不過(guò)最常用的WebService發(fā)現(xiàn)服務(wù)

是使用UDDI發(fā)現(xiàn),即向UDDI服務(wù)器注冊(cè)所創(chuàng)建的WebService,這樣整個(gè)Internet上的

其他用戶可以調(diào)用該WebService的功能了。其中的MyWebSv.wsdl是該WebService的

服務(wù)描述,以方便調(diào)用方了解WebService的功能等信息。Reference.cs是客戶端的代理

類,可用于客戶端程序以所屬平臺(tái)的方式直接調(diào)用WebService提供的方法等。

Reference.map是一個(gè)XML文件,映射了所序列化的文件,即*.disco文件和*.wsdl文件。

在實(shí)際的項(xiàng)目開發(fā)中,WebService的這些細(xì)節(jié)工作一般由編程者手動(dòng)編寫,這樣更適用于

不同項(xiàng)目的需求。

8

.net理論知識(shí)

什么是面向?qū)ο?/p>

面向?qū)ο?0=面向?qū)ο蟮姆治鯫OA+面向?qū)ο蟮脑O(shè)計(jì)00D+面向?qū)ο蟮木幊?/p>

OOP:

通俗的解釋就是萬(wàn)物皆對(duì)象,把所有的事物都看作一個(gè)個(gè)可以獨(dú)立的對(duì)象(單元),它

們可以自己完成自己的功能,而不是像C那樣分成一個(gè)個(gè)函數(shù);

現(xiàn)在純正的OO語(yǔ)言主要是java和C#,C++也支持00,C是面向過(guò)程的。

闡述面向接口、面向?qū)ο?、面向方面編程的區(qū)別

面向?qū)ο蟛缓媒忉專梢岳斫鉃橐砸磺性鞫际菍?duì)象,在設(shè)計(jì)時(shí)以對(duì)象為單位,考慮它的屬

性及方法.設(shè)計(jì)中采用了封裝、繼承、抽象的手法

面向接口本身就是面向?qū)ο蟮模瑹o(wú)所謂區(qū)別,只不過(guò)面向接口的好處是耦合性低

面向方面Aspect-OiientedPiogianuning(AOP)就是大名鼎鼎的AOP.其實(shí)有點(diǎn)象struts里的

攔截。

舉例:假設(shè)有在一個(gè)應(yīng)用系統(tǒng)中,有一個(gè)共享的數(shù)據(jù)必須被并發(fā)同時(shí)訪問(wèn),首先,

將這個(gè)數(shù)據(jù)封裝在數(shù)據(jù)對(duì)象中,稱為DataClass,同時(shí),將有多個(gè)訪問(wèn)類,專門用于在同一

時(shí)刻訪問(wèn)這同一個(gè)數(shù)據(jù)對(duì)象。

為了完成上述并發(fā)訪問(wèn)同一資源的功能,需要引入鎖Lock的概念,乜就是說(shuō),某個(gè)時(shí)刻,

當(dāng)有一個(gè)訪問(wèn)類訪問(wèn)這個(gè)數(shù)據(jù)對(duì)象時(shí),這個(gè)數(shù)據(jù)對(duì)象必須上鎖Locked,用完后就立即解鎖

unLocked,再供其它訪問(wèn)類訪問(wèn)。

面向?qū)ο蟮乃枷胫饕ㄊ裁矗?/p>

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

封裝;用抽象的數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起,數(shù)據(jù)被保護(hù)在抽象數(shù)據(jù)類型

內(nèi)。

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

抽象類是否可以繼承實(shí)體類?

抽象類可以繼承實(shí)體類,但是有個(gè)條件,條件是,實(shí)體類必須要有明確的構(gòu)造函數(shù)。

當(dāng)類T只聲明了私有實(shí)例構(gòu)造函數(shù)時(shí),則在T的程序文本外部,是否可以從T派生出新的

類,是否可以直接創(chuàng)建T的任何實(shí)例。

不可以,不可以

C#中有沒(méi)有靜態(tài)構(gòu)造函數(shù),如果有是做什么用的?

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

9

調(diào)用靜態(tài)構(gòu)造函數(shù)來(lái)初始化類。靜態(tài)構(gòu)造函數(shù)既沒(méi)有訪問(wèn)修飾符,也沒(méi)有參數(shù)。在創(chuàng)建第一

個(gè)實(shí)例或引用任何靜態(tài)成員之前,將自動(dòng)調(diào)用靜態(tài)構(gòu)造函數(shù)來(lái)初始化類。無(wú)法直接調(diào)用靜態(tài)

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

當(dāng)類使用日志文件時(shí),將使用這種構(gòu)造函數(shù)向日志文件中寫入項(xiàng)。

什么是.n8?

,net是一種平臺(tái)和框架,.ne1不是單純的語(yǔ)言也不是單純的工具,它是從底層平臺(tái)開始

構(gòu)建起來(lái)的一個(gè)整體框架

請(qǐng)以圖示方式解釋.netframework?

VB

C++

c#

Jscript

CommonLanguageSpecification

XMLWeb

services

WebForms

10

WindowsForms

DataandXML

BaseClassLibrary

CLR

CLI

VisualStudio.NET

11

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

命名空間是用于避免命名沖突,專用于組織代碼,當(dāng)代碼要在其他某個(gè)應(yīng)用程序

中重用時(shí),可以降低復(fù)雜性。

程序集是重用代碼的一種方式驗(yàn)證控件

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

個(gè)程序集中

命名空間

程序集

有邏輯編譯時(shí)機(jī)制

有物理編譯時(shí)機(jī)制

不是運(yùn)行時(shí)實(shí)體

是運(yùn)行時(shí)實(shí)體

為源代碼元素的名稱提供邏輯結(jié)構(gòu)

為可執(zhí)行文件的運(yùn)行時(shí)提供物理結(jié)構(gòu)

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

WEB控件是能拖放在WEB頁(yè)面上的控件

WEB控件分為;內(nèi)部控件,列表控件,復(fù)雜控件,

?WEB控件優(yōu)勢(shì):

1Web控件是對(duì)象,與對(duì)象一樣,Web控件擁有方法和屬性,并且響應(yīng)事件

1一旦將Web控件包括在Web頁(yè)中,就可以設(shè)置其屬性并調(diào)用其方法

1可以為Web控件編寫服務(wù)器端代碼以響應(yīng)在客戶端上發(fā)生的事件

ASP0NET中共有幾種類型的控件?各有什么區(qū)別?

WEB控件分為:內(nèi)部控件,列表控件,復(fù)雜控件,驗(yàn)證控件

內(nèi)部控件:內(nèi)部控件的使用方法與HTML控件相同,它們映射到HTML元素并

12

通過(guò)使用runat="server"屬性在服務(wù)器上執(zhí)行

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

復(fù)雜控件:當(dāng)希望控件擁有復(fù)雜的功能或使用HTML元素?zé)o法創(chuàng)建的功能豐富

的用戶界面時(shí),可以使用復(fù)雜控件

驗(yàn)證控件:輸入控件的數(shù)據(jù)需要進(jìn)行準(zhǔn)確性和取值范圍方面的檢查

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

什么?為什么要使用自動(dòng)傳回。

由于ASP。NET是Web頁(yè)面和服務(wù)端分離的,因此要產(chǎn)生了服務(wù)端事件.

使用_doPostBack函數(shù)能夠自動(dòng)地把客戶端的javascript事件轉(zhuǎn)變?yōu)?個(gè)服務(wù)器端

的事件

,A框架自動(dòng)為我們處理有關(guān)的細(xì)節(jié)簡(jiǎn)化工作。

使用自動(dòng)傳回的特性:在檢測(cè)到一個(gè)特定用戶動(dòng)作時(shí),自動(dòng)傳回能夠?qū)⑦@個(gè)頁(yè)面?zhèn)骰胤?/p>

務(wù)器以處理

事件.

在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ù)端事件

請(qǐng)解釋ASP.NET中以什么方式進(jìn)行數(shù)據(jù)驗(yàn)證。

A中有非空驗(yàn)證,比較驗(yàn)證,取值范圍驗(yàn)證,正則表達(dá)式驗(yàn)證及客戶自定義驗(yàn)證

五大控件,另還有一個(gè)集中驗(yàn)證信息處理控件

什么是ASP.Net中的用戶控件

用戶控件是能夠在其中放置標(biāo)記和Web服務(wù)器控件的容器。然后,可以將用戶控件作為一

個(gè)單元對(duì)待,為其定義屬性和方法。

用戶控件以。ascx為擴(kuò)展名,可以拖到不同的頁(yè)面中調(diào)用,以節(jié)省代碼。比如登陸可能在多

個(gè)頁(yè)面上有,就可以做成用戶控件,但是有一個(gè)問(wèn)題就是用戶控件拖到不同級(jí)別的目錄下后

里面的圖片等的相對(duì)路徑會(huì)變得不準(zhǔn)確,需要自己寫方法調(diào)整。

問(wèn)這樣的問(wèn)題,一般是迷惑你。因?yàn)樾率诌€是分不清楚用戶控件和服務(wù)器控件(也稱自定義

控件),用戶控件一般用在內(nèi)容多為靜態(tài),或者少許會(huì)改變的情況下,用的比較大,類似ASP

13

中的include。。但是功能要強(qiáng)大的多。

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

可以調(diào)用

例如:vasp:TextBoxid="TextBoxl"onclick="clientfunction();"runat="sener"></asp:TextBox>

<INPUTid="Button2"value="Button"name="Button2"runat="server"

onclick="clientfunction();,,>

C#,Java和C++的特點(diǎn),有什么相同的地方,不同的地方,C#分別從C++和java中吸取了

他們那些優(yōu)點(diǎn)?

C#看起來(lái)與Java有著驚人的相似;它包括了諸如單一繼承,界面,與Java幾乎同樣的語(yǔ)法,和編

譯成中間代碼再運(yùn)行的過(guò)程.但是C#與Java有著明顯的不同,它借鑒了Delphi的一個(gè)特點(diǎn),與

COM(組件對(duì)象模型)是直接集成。

微軟言定義主耍是從C和C++繼承而來(lái)的,而且語(yǔ)言中的許多元素也反吠了這?點(diǎn).C#

在設(shè)計(jì)者從C++繼承的可選選項(xiàng)方面比Java要廣泛一些(比如說(shuō)structs),它還增加了自己新

的特點(diǎn)(比方說(shuō)源代碼版本定義).

C#從Java繼承而來(lái)的特點(diǎn)

類:在C#中類的聲明與Java很相似。特點(diǎn)看起來(lái)與Java相比沒(méi)有變化.

布爾運(yùn)算:條件表達(dá)式的結(jié)果是布爾數(shù)據(jù)類型,布爾數(shù)據(jù)類型是這種語(yǔ)言中獨(dú)立的一種數(shù)據(jù)

類型.從布爾類型到其他類型沒(méi)有直接的轉(zhuǎn)換過(guò)程.布爾常量true和false是C#中的關(guān)鍵字.

錯(cuò)誤處理:如Java中那樣,通過(guò)拋出和捕捉異常對(duì)象來(lái)管理錯(cuò)誤處理過(guò)程.

內(nèi)存管理:由底層.NET框架進(jìn)行自動(dòng)內(nèi)存垃圾回收.

C#從C和C++繼承的特點(diǎn)

編譯:程序直接編譯成標(biāo)準(zhǔn)的二進(jìn)制可執(zhí)行形式.

結(jié)構(gòu)體:一個(gè)C#的結(jié)構(gòu)體與C++的結(jié)構(gòu)體是相似的,因?yàn)樗軌虬瑪?shù)據(jù)聲明和方法.但是,

不象C++,C#結(jié)構(gòu)體與類是不同的而且不支持繼承.但是,與Java相同的是,一個(gè)結(jié)構(gòu)體可以實(shí)

現(xiàn)界面.

預(yù)編譯:C#中存在預(yù)編譯指令支持條件編譯,警告,錯(cuò)誤報(bào)告和編譯行控制.#error

C#獨(dú)有的特點(diǎn)

中間代碼:微軟在用戶選擇何時(shí)MSIL應(yīng)該編譯成機(jī)器碼的時(shí)候是留了很大的余地.微軟公

14

司很小心的聲稱MSIL不是解釋性的,而是被編譯成了機(jī)器碼.它也明白許多-如果不是大多

數(shù)的話--程序員認(rèn)為Java程序要不可避免的比C編寫的任何東西都要慢.而這種實(shí)現(xiàn)方式?jīng)Q

定了基于MSIL的程序(指的是用C#,VisualBasic,“ManagedC十十”一C+-的一個(gè)符合CLS的版

本--等語(yǔ)言編寫的程序)將在性能上超過(guò)“解釋性的“Java代碼.當(dāng)然,這一點(diǎn)還需要得到事實(shí)證

明,因?yàn)镃#和其他生成MSIL的編譯器還沒(méi)有發(fā)布.但是JavaJIT編譯器的普遍存在使得Java

和C#在性能上相對(duì)相同.象”C#是編譯語(yǔ)言而Java是解釋性的,”之類的聲明只是商業(yè)技

巧.Java的中間代碼和MSIL都是中間的匯編形式的語(yǔ)言,它們?cè)谶\(yùn)行時(shí)或其它的時(shí)候被編譯

成機(jī)器代碼.

命名空間中的聲明:當(dāng)你創(chuàng)建一個(gè)程序的時(shí)候,你在一個(gè)命名空間里創(chuàng)建了一個(gè)或多個(gè)類.同

在這個(gè)命名空間里(在類的外面)你還有可能聲明界面,枚舉類型和結(jié)構(gòu)體.必須使用using關(guān)

鍵字來(lái)引用其他命名空間的內(nèi)容.

基本的數(shù)據(jù)類型:C#擁有比C,C++或者Java更廣泛的數(shù)據(jù)類型.這些類型是bool,byte,ubyte,

short,ushort,int,uint,long,ulong,float,double,decimal.象Java一樣,所有這些類型都有一個(gè)

固定的大小.又象C和C++一樣,每個(gè)數(shù)據(jù)類型都有有符號(hào)和無(wú)符號(hào)兩種類型.與Java相同的

是,?個(gè)字符變量包含的是個(gè)16位的Unicode字符.C#新的數(shù)據(jù)類型是decimal數(shù)據(jù)類型,

對(duì)于貨幣數(shù)據(jù),它能存放28位10進(jìn)制數(shù)字.

兩個(gè)基本類:一個(gè)名叫object的類是所有其他類的基類.而一個(gè)名叫string的類也象object

一樣是這個(gè)語(yǔ)言的一部分.作為語(yǔ)言的一部分存在意味著編譯器有可能使用它-無(wú)論何時(shí)你

在程序中寫入一句帶引號(hào)的字符串,編譯器會(huì)創(chuàng)建一個(gè)string對(duì)象來(lái)保存它.

參數(shù)傳遞:方法可以被聲明接受可變數(shù)目的參數(shù).缺省的參數(shù)傳遞方法是對(duì)基本數(shù)據(jù)類型進(jìn)

行值傳遞.ref關(guān)鍵字可以用來(lái)強(qiáng)迫一個(gè)變量通過(guò)引用傳遞,這使得一個(gè)變量可以接受一個(gè)返

回值.out關(guān)鍵字也能聲明引用傳遞過(guò)程,與ref不同的地方是,它指明這個(gè)參數(shù)并不需要初始

值.

與COM的集成:C#對(duì)Windows程序最大的賣點(diǎn)可能就是它與COMH勺無(wú)縫集成了,COM就

是微軟的Win32組件技術(shù).實(shí)際上,最終有可能在任何.NET語(yǔ)言里編寫COM客戶和服務(wù)器

端.C#編寫的類可以子類化一個(gè)以存在的COM組件;生成的類也能被作為一個(gè)COM組件使

用,然后又能使用,比方說(shuō),JScript若言子類化它從而得到第三個(gè)COM組件.這種現(xiàn)象的結(jié)果

是導(dǎo)致了一個(gè)運(yùn)行環(huán)境的產(chǎn)生,在這個(gè)環(huán)境里的組件是網(wǎng)絡(luò)服務(wù),可用用任何.NET語(yǔ)言子類

化.

索引下標(biāo):一個(gè)索引與屬性除了不使用屬性名來(lái)引用類成員而是用一人方括號(hào)中的數(shù)字來(lái)匿

名引用(就象用數(shù)組下標(biāo)一樣)以外是相似的.

代理和反饋:一個(gè)代理對(duì)象包括了訪問(wèn)一個(gè)特定對(duì)象的特定方法所需的信息.只要把它當(dāng)成

一個(gè)聰明的方法指針就行了.代理對(duì)象可以被移動(dòng)到另一個(gè)地方,然后可以通過(guò)訪問(wèn)它來(lái)對(duì)已

存在的方法進(jìn)行類型安全的調(diào)用.一個(gè)反饋方法是代理的特例.event美鍵字用在將在事件發(fā)

生的時(shí)候被當(dāng)成代理調(diào)用的方法聲明中.

在C#中,stringstr=null與stringstr="”的區(qū)別。

15

stringstr=null是不給他分配內(nèi)存空間,而stringsir給它分配長(zhǎng)度為空字符串的內(nèi)存空

怎樣理解靜態(tài)變量?靜態(tài)成員和非靜態(tài)成員的區(qū)別?

靜態(tài)變量屬于類,而不屬于對(duì)象;并對(duì)所有對(duì)象所享;靜態(tài)成員在加類的時(shí)候就被加載。

靜態(tài)成員和非靜態(tài)成員的區(qū)別?

靜態(tài)變量使用static修飾符進(jìn)行聲明,靜態(tài)成員在加類的時(shí)候就被加載(在類被實(shí)例

化時(shí)創(chuàng)建,哪個(gè)對(duì)),通過(guò)類進(jìn)行訪問(wèn)

不帶有static修飾符聲明的變量稱做非靜態(tài)變量,在對(duì)象被實(shí)例化時(shí)創(chuàng)建,通過(guò)對(duì)象進(jìn)

行訪問(wèn)

一個(gè)類的所有實(shí)例的同一靜態(tài)變量都是同一個(gè)值,同一個(gè)類的不同實(shí)例的同一非靜態(tài)變

量可以是不同的值

靜態(tài)函數(shù)的實(shí)現(xiàn)里不能使用非靜態(tài)成員,如非靜態(tài)變量、非靜態(tài)函數(shù)等

DataReader和DataSet的異同

DataReader和DataSet最大的區(qū)別在于,DataReader使用時(shí)始終占用SqlConncction,在線操

作數(shù)據(jù)庫(kù),任何對(duì)SqlConnection的操作都會(huì)引發(fā)DaiaReader的異常,因?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)镈alaSet將數(shù)據(jù)全部加載在內(nèi)存中。所以比較消耗內(nèi)存,但是確比DataReader要靈活,

可以動(dòng)態(tài)的添加行,歹U,數(shù)據(jù)。對(duì)數(shù)據(jù)庫(kù)進(jìn)行回傳更新操作。

簡(jiǎn)述靜態(tài)類和靜態(tài)成員

靜態(tài)類中的成員都必須是靜態(tài)的。靜態(tài)類無(wú)構(gòu)造方法,并且是密封類無(wú)法被繼承。

靜態(tài)成員訪問(wèn)時(shí)只能通過(guò)類名來(lái)訪問(wèn),不能通過(guò)對(duì)象訪問(wèn)(和JAVA有區(qū)別),this

也無(wú)法訪問(wèn)靜態(tài)成員。

描述接口的作用

充當(dāng)類的功能界面,接口里的成員屬于抽象描述,必須通過(guò)類的實(shí)現(xiàn)才能使用。如:某個(gè)項(xiàng)

目有多個(gè)模塊組成,每個(gè)模塊由一個(gè)開發(fā)者完成,開發(fā)者只需編寫完模塊功能實(shí)現(xiàn)后,留下

的接口供其他人使用。其他人在程序中,使用接口時(shí),只需知道接口的功能,不了解如何實(shí)

現(xiàn)。

當(dāng)功能模塊無(wú)法滿足需要或功能模塊的需求變更時(shí),程序員只需將該功能模塊的實(shí)現(xiàn)代碼進(jìn)

16

行修改和擴(kuò)充,而其他調(diào)用接口的程序無(wú)須改動(dòng)。接口的這種應(yīng)用模式成為brige模式(即

意圖和實(shí)現(xiàn)分離)

接口反映了面向?qū)ο蟮亩鄳B(tài)特征,即通過(guò)相同方法得到不同實(shí)現(xiàn)。接口也反映了面向?qū)ο蟮?/p>

封裝特征,使用者可以不清楚接口成員的實(shí)現(xiàn)細(xì)節(jié)。

注意:因?yàn)榻涌诔蓡T默認(rèn)的訪問(wèn)權(quán)限是public,所以在實(shí)現(xiàn)接口時(shí),類的成員必須為public,

且方法名和參數(shù)必須一致。

描述抽象類

用abstract修飾的類。抽象類可以包含實(shí)現(xiàn)的成員。未實(shí)現(xiàn)的成員隱含的是virtual

屬性,子類實(shí)現(xiàn)時(shí)必須用override關(guān)鍵字。

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

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

沒(méi)有實(shí)際的表示形式,其他類型必須轉(zhuǎn)換為接口類型。?個(gè)接口定義個(gè)協(xié)定。實(shí)現(xiàn)接口的

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

在項(xiàng)目中為什么使用接口?接口的好處是什么?什么是面向接口開發(fā)?

接口只是一種約束。使用interface去定義某些特定的功能,為的是不要將代碼寫

死在自定義類里,以便在系統(tǒng)開發(fā)、事后維護(hù)、功能擴(kuò)充上更有擴(kuò)展性。

接口用于描述一組類的公共方法/公共屬性.它不實(shí)現(xiàn)任何的方法或?qū)傩?,只是?/p>

訴繼承它的類至少要實(shí)現(xiàn)哪些功能,繼承它的類可以增加自己的方法.使用接口可以使繼承

它的類:命名統(tǒng)一/規(guī)范,易于維護(hù)。提供永遠(yuǎn)的接口。當(dāng)類增加時(shí),現(xiàn)有接口方法能夠滿

足繼承類中的大多數(shù)方法,沒(méi)必要重新給新類設(shè)計(jì)一組方法,也節(jié)省了代碼,提高了開發(fā)效

率。

面向接口開發(fā)的好處有結(jié)構(gòu)清晰,類間通信簡(jiǎn)單易懂,擴(kuò)展性好,提高復(fù)用性等

等。

面向接口開發(fā)就是指面向抽象協(xié)議編程,實(shí)現(xiàn)者在實(shí)現(xiàn)時(shí)要嚴(yán)格按協(xié)議來(lái)辦。

接口和類有什么異同。

不同點(diǎn):

1、不能直接實(shí)例化接口。

2、接口只包含方法或?qū)傩缘穆暶?,不包含方法的?shí)現(xiàn)。

3、接口可以多繼承,類只能單繼承。

17

4、類有分部類的概念,定義可在不同的源文件之間進(jìn)行拆分。

5、表達(dá)的含義不同,接口主要定義一種規(guī)范,統(tǒng)一調(diào)用方法,也就是規(guī)范類,約束類,類

是方法功能的實(shí)現(xiàn)和集合

相同點(diǎn):

1、接口、類和結(jié)構(gòu)都可以從多個(gè)接口繼承。

2、接口類似于抽象基類:繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。

3、接口和類都可以包含事件、索引器、方法和屬性。

您在什么情況下會(huì)用到虛方法或抽象類,接口?

如果某個(gè)方法可能性在派生類中會(huì)被重寫。這時(shí)就將該方法寫為虛方法。

抽象類:是一個(gè)類型,與派生類之間的關(guān)系是一個(gè)“ISA”的關(guān)系。用來(lái)做基類,

抽象類不能創(chuàng)建對(duì)象,類中包括抽象方法和實(shí)例方法。

接口:是設(shè)計(jì)一個(gè)規(guī)范,描述了Cando;與實(shí)現(xiàn)類之間是中“LINEA的關(guān)系,

C#中接口不能包含字段訪問(wèn)修飾符。

對(duì)比抽象基類和接口的使用

抽象類能有具體實(shí)現(xiàn),而接口只定義行為規(guī)范,不能有具體實(shí)現(xiàn)。一個(gè)類只能繼

承一個(gè)父類,但能實(shí)現(xiàn)多個(gè)接口。

C#中的接口和抽象類有什么異同。你選擇使用接口和抽象類的依據(jù)是什么?

1、繼承:接口支持多繼承;抽象類不能實(shí)現(xiàn)多繼承。

2、表達(dá)的概念:接口用于規(guī)范,抽象類用于共性。抽象類是一類事物的高度聚合,

那么對(duì)于繼承抽象類的子類來(lái)說(shuō),對(duì)于抽象類來(lái)說(shuō),屬于“是”的關(guān)系:而接口是定義行為規(guī)

范,因此對(duì)于實(shí)現(xiàn)接口的子類來(lái)說(shuō),相對(duì)于接口來(lái)說(shuō),是”行為需要按照接口來(lái)完成,

3、方法實(shí)現(xiàn):對(duì)抽象類中的方法,即可以給出實(shí)現(xiàn)部分,也可以不給出;而接口

的方法(抽象規(guī)則)都不能給出實(shí)現(xiàn)部分,接口中方法不能加修飾符。

4、子類重寫:繼承類對(duì)于兩者所涉及方法的實(shí)現(xiàn)是不同的,繼承類對(duì)于抽象類所

定義的抽象方法,可以不用重寫,也就是說(shuō),可以延用抽象類的方法;而對(duì)于接口類所定義

的方法或者屬性來(lái)說(shuō),在繼承類中必須重寫,給出相應(yīng)的方法和屬性實(shí)現(xiàn)。

5、新增方法的影響:在抽象類中,新增一個(gè)方法的話,繼承類中可以不用作任何

處理;而對(duì)于接口來(lái)說(shuō),則需要修改繼承類,提供新定義的方法。

18

6、接口可以作用于值類型(枚舉可以實(shí)現(xiàn)接口)和引用類型;抽象類只能作用于

引用類型。

7、接口不能包含字段和已實(shí)現(xiàn)的方法,接口只包含方法、屬性、索引器、事件的

簽名;抽象類可以定義字段、屬性、包含有實(shí)現(xiàn)的方法。

8、接口可以用于支持回調(diào)(CallBack);抽象類不能實(shí)現(xiàn)回調(diào),因?yàn)槔^承不支持。

如下給出兩者的簡(jiǎn)單對(duì)比表格。

接口

抽象類

多繼承

支持

不支持

類型限制

沒(méi)有

有,只能是引用類型

方法實(shí)現(xiàn)

繼承類型中必須給出方法實(shí)現(xiàn)

繼承類中可以不給出

擴(kuò)展性

比較麻煩

相對(duì)比較靈活

多層繼承

比較麻煩,需要借助虛函數(shù)

比較靈活

如何選擇:

1、看是否需要多繼承,如果需要就只能使用接口

2、看你在累里定義的方法是否需要有實(shí)現(xiàn)的代碼,如果耍,就使用抽象類

3、使不同的類型有共同的特性的時(shí)候使用接口,因?yàn)樗С侄嗬^承,只想從一個(gè)類型繼承

出不同的行為的子類的時(shí)候使用抽象類,可以在基類里有代碼實(shí)現(xiàn)。

從實(shí)現(xiàn)接口和現(xiàn)實(shí)抽象類的方法來(lái)看,接口是死的,抽象類是活的,當(dāng)然實(shí)現(xiàn)接口的類是活

19

的。

結(jié)構(gòu)和類的區(qū)別

簡(jiǎn)單的說(shuō)成class可以被實(shí)例化,屬于引用類型struct屬于值類型,

1)、類型,空間分配。結(jié)構(gòu)是值類型,是分配在內(nèi)存的棧上的.類時(shí)弓用類型,,是分配在內(nèi)

存的堆上的。結(jié)構(gòu)實(shí)例化可以不用new,即使用new操作也不會(huì)在堆里分配內(nèi)存。作參數(shù)

是按值傳遞,類時(shí)引用傳遞,變量用完自動(dòng)解除內(nèi)存分配,類需要垃圾回收期

2)、基類。結(jié)構(gòu)繼承自System.ValueType類,因此不具多態(tài)性。但是注意,System.ValueType

是個(gè)引用類型。類繼承自System.Object類;

3)、職能。sinicl常用于存儲(chǔ)數(shù)據(jù);而class表現(xiàn)為行為

4)、結(jié)構(gòu)沒(méi)有類的特性,不支持繼承。但可以實(shí)現(xiàn)接口。

5)、結(jié)構(gòu)無(wú)法聲明無(wú)參的構(gòu)造函數(shù),但可以聲明有參的構(gòu)造函數(shù)

6)、結(jié)構(gòu)的實(shí)例成員不能直接賦初值,必須通過(guò)構(gòu)造函數(shù)來(lái)賦值,但靜態(tài)成員可以直接賦初

7)^無(wú)抽象結(jié)構(gòu),但有抽象類(abslracl)

8)、class可以聲明proiecled成員、virtual成員、sealed成員和override成員;而sinicl不可

以,但是值得注意的是,struct可以重載System.Object的3個(gè)虛方法,Equals。、ToStringO

和GetHashTable().>

接口與繼承的區(qū)別?什么時(shí)候使用接口,什么時(shí)候使用繼承?

(1)接口定義一個(gè)類型需要實(shí)現(xiàn)的方法,屬性,索引和事件,包括可能的參數(shù)類型和返回

值類型,而把具體的實(shí)現(xiàn)交由相應(yīng)的類或結(jié)構(gòu)來(lái)做,從而為組件提供多態(tài)能力。

(2)繼承常用于在一個(gè)現(xiàn)有父類的基礎(chǔ)上的功能擴(kuò)展,往往是我們將幾個(gè)類中相同的成員

提取出來(lái)放在父類中實(shí)現(xiàn),然后在各自的子類中加以繼承。

(3)接口可以實(shí)現(xiàn)多接口繼承,而繼承只能實(shí)現(xiàn)單繼承。

(4)實(shí)現(xiàn)繼承可繼承父類型的實(shí)現(xiàn),由于接口中沒(méi)有定義方法的實(shí)現(xiàn),因此必須實(shí)現(xiàn)繼承

后該接口的所有方法。

(5)為父類型添加方法可能不影響使用繼承自該類型實(shí)現(xiàn)的用戶,而為接口添加方法導(dǎo)致

用戶必須為新方法添加實(shí)現(xiàn)。

20

(6)當(dāng)派生類和基類是is-a的關(guān)系是使用“繼承",典型案例”蘋果is-a水果”,存在can-do

的關(guān)系時(shí)使用“接口”

重載(Overload)和覆寫(Override)的區(qū)別

簡(jiǎn)單的說(shuō),一個(gè)是同一個(gè)函數(shù)的幾種形式,一個(gè)是重寫父類函數(shù),

重載:當(dāng)類包含兩個(gè)名稱相同但簽名不同(方法名相同,參數(shù)列表不相同)的方法時(shí)

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

覆寫:在類的繼承中使用,通過(guò)覆寫子類方法可以改變父類虛方法的實(shí)現(xiàn)。

區(qū)別:

1、方法的覆蓋是子類和父類之間的關(guān)系,是垂直關(guān)系;方法的重載是同一個(gè)類中

方法之間的關(guān)系,是水平關(guān)系。

2、覆蓋只能由個(gè)方法,或只能由?對(duì)方法產(chǎn)生關(guān)系;方法的重載是多個(gè)方法之間的

關(guān)系。

3、覆蓋要求參數(shù)列表相同;重載要求參數(shù)列表不同。

4、覆蓋關(guān)系中,調(diào)用那個(gè)方法體,是根據(jù)對(duì)象的類型(對(duì)象對(duì)應(yīng)存儲(chǔ)空間類型)來(lái)決

定;重載關(guān)系,是根據(jù)調(diào)用時(shí)的實(shí)參表與形參表來(lái)選擇方法體的。

<%#%>和<%%>有什么區(qū)別?

<%#%>表示綁定的數(shù)據(jù)源

<%%>是服務(wù)器端代碼塊

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

值類型包括簡(jiǎn)單類型、結(jié)構(gòu)體類型和枚舉類型,引用類型包括自定義類、數(shù)組、接口、委托

1、賦值方式:將一個(gè)值類型變量賦給另一個(gè)值類型變量時(shí),將復(fù)制包含的值。這與引用類

型變量的賦值不同,引用類型變量的賦值只復(fù)制對(duì)象的引用,而不復(fù)制對(duì)象本身。

2、派生:值類型不可能派生出新的類型,所有的值類型均隱式派生自System.ValueTypeo

但與引用類型相同的是,結(jié)構(gòu)也可以實(shí)現(xiàn)接口。

3、null:與引用類型不同,值類型不可能包含null值。然而,可空類型功能允許將null賦

給值類型。

4、每種值類型均有一個(gè)隱式的默認(rèn)構(gòu)造函數(shù)來(lái)初始化該類型的默認(rèn)值。

21

值類型主要由兩類組成:結(jié)構(gòu)、枚舉

結(jié)構(gòu)分為以下幾類:Numeric(數(shù)值)類型、整型、浮點(diǎn)型、decimal,book用戶定義的結(jié)

構(gòu)。

引用類型的變量又稱為對(duì)象,可存儲(chǔ)對(duì)實(shí)際數(shù)據(jù)的引用。聲明引用類型的關(guān)鍵字:class、

interfacedelegate內(nèi)置引用類型:object、string

5、值類型存貯在棧中,而引用類型存貯在動(dòng)態(tài)的堆中,棧是先進(jìn)先出的有系統(tǒng)管理的空間,

而堆是由應(yīng)用程序控制的可隨時(shí)申請(qǐng)和釋放該空間,在Donnet中一般情況下有垃圾收集器

處理,他們的不同導(dǎo)致在編程上的不同。

例:

"a=null”的意思是:a的引用置為空但此時(shí)StringBuilder的堆空間并沒(méi)有被釋放,因此在此之

后,輸;Ilb時(shí),仍然可以輸出mxh

usingSystem;

usingSystem.Text;

classEventDel

(

staticvoidMain(string[]args)

(

StringBuildera=newStringBuilder。;〃將StringBuilder的一個(gè)首地址傳給a

StringBuilderb=a;〃將StringBuilder的一個(gè)首地址傳給b

b.Append(,'mxh");

Console.WriteLine(a);

a=null;

Console.WriteLine(b);

}

22

輸出結(jié)果:

mxh

mxh

請(qǐng)按任意鍵繼續(xù)...

C#中的委托是什么?如何理解委托?

簡(jiǎn)單的說(shuō):委托是一種方法容器,里面可以裝載若干個(gè)具有相同簽名的方法引用地址,那么

調(diào)用委托,就相當(dāng)于同時(shí)調(diào)用了該容器內(nèi)的所有方法。

委托可以看做一種新的對(duì)象類型,具有面向?qū)ο蟮奶攸c(diǎn),定義時(shí)可簽名接收參數(shù),委托實(shí)例

化時(shí),可以把方法名作為個(gè)參數(shù)傳遞給委托對(duì)象,委托可以理解為指向函數(shù)的引用。生成

的委托對(duì)象可以代理所傳遞的方法,可以接收方法的參數(shù)。也就是定義了委托,可以在不用

調(diào)用原方法的情況下,調(diào)用那個(gè)方法

例:

例:

publicdelegatestringMyDel(stringnm,stringpwd);〃定義委托簽名接收兩個(gè)參數(shù)

staticvoidMain(string[]args)

{

MyDelmd:newMyDel(方法名)〃定義委托對(duì)象,其引月變量指向參數(shù)中的方

stringresult=md(“張三","1234”);〃調(diào)用委托對(duì)象,傳遞所指方法的參數(shù)

)

委托類似于C或C++中的函數(shù)指針。但不同的是委托是面向?qū)ο?、類型安全的?/p>

委托允許將方法作為參數(shù)進(jìn)行傳遞。

23

委托可用于定義回調(diào)方法。

委托可以鏈接在一起;創(chuàng)建多個(gè)對(duì)象,使用“十二”累加到同一個(gè)委行對(duì)象上的引用上,例

如,可以對(duì)一個(gè)事件調(diào)用多個(gè)方法。

publicdelegatestringMyDeI(stringnm,stringpwd);〃定義委托簽名接收兩個(gè)參數(shù)

staticvoidMain(string[]args)

(

MyDelmd=newMyDel(方法1);〃委托對(duì)象,其引用變量指向參數(shù)中的方法

md+=newMyDel(方法2);

md+=newMyDel(方法3);

stringresult=md(“張三”,”1234");〃調(diào)用委托對(duì)象,傳遞所指方法的參數(shù)

I

方法不需要與委托簽名精確匹配。有關(guān)更多信息,請(qǐng)參見協(xié)變和逆變。

C#2o0版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義

的方法。如:

usingSystem;

className

(

privatestringpName;

〃定義委托類型

publicdelegatevoidmyEventHandler(objectsender,NameEventArgse);

〃定義Get事件

publiceventmyEventHandlerGet;

internalstringText

24

get{returnthis.pName;}

set{

//2

this.pName=value;

this.OnGet(newNameEventArgs("Text屬性被更改了"));

)

)

voidOnGet(NameEventArgsc)//3

{

this.Gct(this,e);〃觸發(fā)事件

)

publicoverridestringIbStringO

{

return"Name類的對(duì)象";

I

publicclassNameEventArgs:EventArgs〃自定義事件信息類

{

stringpArgs;

publicNameEventArgs(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論