Asp.net核心技術思想
1、概述反射和序列化
反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后,可以調用類型的方法或訪問其字段和屬性
序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然后使用HTTP通過Internet在客戶端和服務器之間
傳輸該對象。在另一端,反序列化將從該流重新構造對象。
2.如何把一個array復制到arrayList里
方法一、使用foreach循環,將array數組中的數據逐步放入ArrayList的對象中;
方法二、使用Copy方法,進行數據的復制;
方法三、使用ArrayList的adpater的方法,將整個Array對象封裝到ArrayList對象中。
//author:renfuming
publicstaticvoidMain(string[]renargs)
{
int[]arrayInt=newint[]{1,2,3,4};
ArrayListarrlistInt=newArrayList();
//方法一
foreach(intainarrayInt)
{
arrlistInt.Add(a);
}
Console.WriteLine(arrlistInt[2].ToString());//輸出3
//方法二:
ArrayListarrlistInt2=newArrayList();
arrlistInt2=ArrayList.Adapter(arrayInt);
Console.WriteLine(arrlistInt2[2].ToString());//輸出3
//逆向轉換
ArrayresultArr=(int[])arrlistInt2.ToArray(typeof(int));
Console.WriteLine(resultArr.GetValue(2));//輸出3
}
3.datagrid.datasouse可以連接什么數據源
[dataset,datatable,dataview,IList]等接口類型的對象
4.new有幾種用法
第一種:newClass(),新建一個類的對象,但是此類必須的又可訪問的構造函數
第二種:顯式覆蓋基類的方法:publicnewMenthod(){}
5.概述o/rmapping的原理
利用反射,配置將類于數據庫表映射
O/RMapping(有學習曲線,沒有工具支持會相當大):存在的時間已經很長,我認為它的最主要的作用是關系型數據庫的反設計——關系型數據庫的設計就是要把現實中的對象和對象間關系設計成實體和實體間的關系映射。而O/RMapping恰好相反,它是把實體和實體間的關系映射還原回對象和對象間的關系。
6.類成員有()種可訪問形式
可訪問性:public,PRotected,private,internal
可能還有其他的訪問形式,具體的情況視編碼需要而定
7.用sealed修飾的類有什么特點
sealed修飾符用于防止從所修飾的類派生出其它類。如果一個密封類被指定為其他類的基類,則會發生編譯時錯誤。
密封類不能同時為抽象類。
sealed修飾符主要用于防止非有意的派生,但是它還能促使某些運行時優化。具體說來,由于密封類永遠不會有任何派生類,所以對密封類的
實例的虛擬函數成員的調用可以轉換為非虛擬調用來處理。
8.列舉ADO.NET中的五個主要對象,并簡單描述
connection,command,dataReader,transaction,dataset...
其上對于各種對象,連接不同的數據庫將會有不同的對象變體
Connection:數據庫的連接需要此對象
Command:執行數據表變化的命令
dataReader和dataset主要是對數據庫的表信息進行兩種不同方式的讀取,具體的讀取得區別,后面將會有講解
9.執行下面代碼后:
StringstrTemp="yyaccpx某某某";
IntiSystem.Text.Encoding.Default.GetBytes(strTemp).Length;
Intj=strTemp.Length;
結果:i=(14);j=(11)
i=(14);j=(11)中文在內存中占兩個字節
但是只算是一個字符
10.C#中,stringstr=null與stringstr="",請盡量用文字說明區別。(要點:說明詳細的內存空間分配)
stringstr=""在棧中存取地址,在堆中存放對象的值
而Stringstr=null;僅僅在內存棧中分配了空間
11.詳述.NET里class和struct的異同!
class:放在屬于引用類型,故其存放于內存的堆中
Struct屬于值類型,其存放于棧中,作為參數傳遞的時候屬于值傳遞
類與結構有很多相似之處:結構可以實現接口,并且可以具有與類相同的成員類型。然而,結構在幾個重要方面不同于類:結構為值類型而不
是引用類型,并且結構不支持繼承。結構的值存儲在“在堆棧上”或“內聯”。細心的程序員有時可以通過聰明地使用結構來增強性能。
12.概述.NET里對remoting和webservice兩項技術的理解和實際中的應用。
其實現的原理并沒有本質的區別,在應用開發層面上有以下區別:
1、Remoting可以靈活的定義其所基于的協議,如果定義為HTTP,則與WebService就沒有什么區別了,一般都喜歡定義為TCP,這樣
比WebService稍為高效一些
2、Remoting不是標準,而WebService是標準;
3、Remoting一般需要通過一個WinForm或是Windows服務進行啟動,而WebService則需要IIS進行啟動。
4、在VS.net開發環境中,專門對WebService的調用進行了封裝,用起來比Remoting方便
我建議還是采用WebService好些,對于開發來說更容易控制
Remoting一般用在C/S的系統中,WebService是用在B/S系統中
后者還是各語言的通用接口
相同之處就是都基于xml
為了能清楚地描述WebService和Remoting之間得區別,我打算從他們的體系結構上來說起:
WebService大體上分為5個層次:
1.Http傳輸信道
2.XML的數據格式
3.SOAP封裝格式
4.WSDL的描述方式
5.UDDI
總體上來講,.NET下的WebService結構比較簡單,也比較容易理解和應用:
一般來講在.NET結構下的WebService應用都是基于.netframework以及IIS的架構之下,所以部署(Dispose)起來相對比較容易點.
從實現的角度來講,
首先WebService必須把暴露給客戶端的方法所在的類繼承于:System.Web.Services.WebService這個基類
其次所暴露的方法前面必須有[WebMethod]或者[WebMethodAttribute]
WebService的運行機理
首先客戶端從服務器的到WebService的WSDL,同時在客戶端聲稱一個代理類(ProxyClass)
這個代理類負責與WebService服務器進行Request和Response
當一個數據(XML格式的)被封裝成SOAP格式的數據流發送到服務器端的時候,就會生成一個進程對象并且把接收到這個Request的
SOAP包進行解析,然后對事物進行處理,處理結束以后再對這個計算結果進行SOAP包裝,然后把這個包作為一個Response發送給客戶
端的代理類(ProxyClass),同樣地,這個代理類也對這個SOAP包進行解析處理,繼而進行后續操作。
這就是WebService的一個運行過程。
下面對.netRemoting進行概括的闡述:
.netRemoting是在DCOM等基礎上發展起來的一種技術,它的主要目的是實現跨平臺、跨語言、穿透企業防火墻,這也是他的基本特
點,與WebService有所不同的是,它支持HTTP以及TCP信道,而且它不僅能傳輸XML格式的SOAP包,也可以傳輸傳統意義上的二進制流
,這使得它變得效率更高也更加靈活。而且它不依賴于IIS,用戶可以自己開發(Development)并部署(Dispose)自己喜歡的宿主服務
器,所以從這些方面上來講WebService其實上是.netRemoting的一種特例。
ASP.NETWeb服務基礎結構通過將SOAP消息映射到方法調用,為Web服務提供了簡單的API。通過提供一種非常簡單的編程模型(基于將SOAP消息交換映射到方法調用),它實現了此機制。ASP.NETWeb服務的客戶端不需要了解用于創建它們的平臺、對象模型或編程語言。而服務也不需要了解向它們發送消息的客戶端。唯一的要求是:雙方都要認可正在創建和使用的SOAP消息的格式,該格式是由使用WSDL和XML架構(XSD)表示的Web服務合約定義來定義的。
.NETRemoting為分布式對象提供了一個基礎結構。它使用既靈活又可擴展的管線向遠程進程提供.NET的完全對象語義。ASP.NETWeb服務基于消息傳遞提供非常簡單的編程模型,而.NETRemoting提供較為復雜的功能,包括支持通過值或引用傳遞對象、回調,以及多對象激活和生命周期管理策略等。要使用.NETRemoting,客戶端需要了解所有這些詳細信息,簡而言之,需要使用.NET建立客戶端。.NETRemoting管線還支持SOAP消息,但必須注意這并沒有改變其對客戶端的要求。如果Remoting端點提供.NET專用的對象語義,不管是否通過SOAP,客戶端必須理解它們。
13.什么是code-behind技術
對于每一個Aspx文件可以相對應一個CS文件類,aspx繼承自對應的CodeBehind類,在編譯時,CodeBhind類編譯到webui工程對應的dll中,而aspx頁面中的內含代碼和aspx一起編譯到temporary.dll中,被客戶端瀏覽器訪問。
14.概述三層結構體系
webUI層:封裝基本的頁面布局形式,即表示層
Dataaccess(DAO)層:數據訪問層,利用各種相關的技術,與底層數據庫進行交互
Business層:業務邏輯層,封裝整個程序的業務邏輯代碼,主要與DAO層相關聯
Model層:封裝程序領域對象,該層可以在上面的三層之間進行很好的交互
這只是基本的三層架構設計,如果利用設計模式,則可以在此基礎上進行靈活的變化
15.asp.net如何實現MVC模式,舉例說明!
在Asp.net中實現MVC模式,相對于java沒有那么快捷,但是仍是可以實現的
且由于代碼隱藏和事件驅動得引入,意義不時很大,具體的實現,可以利用HttpHandler,如此,則應在Web.config文件中配置相關的節點
//Author:renfuming
<httpHandlers>
<addverb="*"path="SendTopic.aspx"type="wyzBBS.Servers.SendRootHandler"/>
<addverb="*"path="SelectTopic.aspx"type="wyzBBS.Servers.SelectTopicHandler"/>
<addverb="*"path="Question.aspx"type="wyzBBS.Servers.QuestionHandler"/>
<addverb="POST,GET"path="Ajaxpro/*.ashx"type="AjaxPro.AjaxHandlerFactory,AjaxPro"/>
</httpHandlers>
16.值類型和引用類型的區別?
C#支持兩種類型:“值類型”和“引用類型”。
值類型(如char、int和float)、枚舉類型和結構類型。
引用類型包括類(Class)類型、接口類型、委托類型和數組類型。
值類型與引用類型的區別在于值類型的變量直接包含其數據,而引用類型的變量則存儲對象引用。對于引用類型,兩個變量可能引用同一個對
象,因此對一個變量的操作可能影響另一個變量所引用的對象。對于值類型,每個變量都有自己的數據副本,對一個變量的操作不可能影響另一個變量
17.了解程序集強簽名嗎?
用強名稱來給程序集簽名即謂之程序集強簽名!
通過簽發具有強簽名的程序集合,可以確保名稱的全局唯一性!因為強名稱是依賴于唯一的密鑰對來確保名稱的唯一性,其他人不
新聞熱點
疑難解答