版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《美國(guó)的誕生》課件
- 《LA格式講座》課件
- 教培合同范本(2篇)
- 2024年度涉外離婚登記所需材料與程序詳解協(xié)議3篇
- 《地下水資源調(diào)查》課件
- 《知識(shí)產(chǎn)權(quán)常識(shí)》課件
- 2025年揚(yáng)州貨運(yùn)資格證考試有哪些項(xiàng)目
- 2025年安康貨運(yùn)從業(yè)資格證考試技巧
- 2025年蘭州從業(yè)資格證應(yīng)用能力考些啥
- 國(guó)際金融學(xué)課件匯率理論與學(xué)說(shuō)
- 第四章分子的對(duì)稱性
- (最新)專家服務(wù)基層工作培訓(xùn)會(huì)領(lǐng)導(dǎo)講話(精)
- 蘇州預(yù)防性試驗(yàn)、交接試驗(yàn)費(fèi)用標(biāo)準(zhǔn)
- 最新【SD高達(dá)G世紀(jì)-超越世界】各強(qiáng)力機(jī)體開發(fā)路線
- 完整MAM-KY02S螺桿空壓機(jī)控制器MODBUSⅡ通信協(xié)議說(shuō)明
- 《納米材料工程》教學(xué)大綱要點(diǎn)
- 專業(yè)英語(yǔ)四級(jí)聽力模擬題
- [廣州]污水處理廠工程監(jiān)理投標(biāo)大綱(325頁(yè)完整)_secret
- 南京祿口機(jī)場(chǎng)二期擴(kuò)建工程項(xiàng)目融資分析報(bào)告(第一稿)
- 《做陽(yáng)光少年主題班會(huì)》PPT課件(1)
- 鄉(xiāng)鎮(zhèn)殯葬整治工作開展情況匯報(bào)
評(píng)論
0/150
提交評(píng)論