c#繼承: 程序員
base 表示當前對象基類的實例(使用base關鍵字能夠調用基類的成員)this表示當前類的實例web
在靜態方法中不可使用base和this關鍵字數據庫
派生類會繼承基類全部的成員可是構造函數和析構函數不會被繼承編程
注意若是派生類的方法和基類的方法同名則基類中的方法將會被隱藏若是須要隱藏則可使用關鍵字new來隱藏若是不寫new關鍵字默認處理爲隱藏雖然基類中同名的方法被隱藏了可是仍是能夠經過base關鍵字來調用c#
//若是子類方法的方法名和基類的方法名相同時,系統將隱藏基類同名方法,自動調用子類的同名方法瀏覽器
//派生類會繼承基類全部的成員,可是不能顯示調用基類的是有成員安全
//在派生類中不能夠調用基類的是有成員,如num1,num2,可是能夠實現調用基類方法服務器
virtual 用在基類中指定一個虛方法屬性表示這個方法屬性能夠重寫網絡
override 用在派生類中表示對基類虛方法屬性的重寫app
不能重寫非虛方法或靜態方法重寫的基方法必須是 virtualabstract 或 override 的爲何 override 也能夠重寫呢由於基類中的 override 其實是對基類的基類進行的重寫因爲繼承可傳遞因此也能夠對基類中 override 的方法進行重寫
override 聲明不能更改 virtual 方法的可訪問性override 方法和 virtual 方法必須具備相同的訪問級別修飾符
不能使用修飾符 newstaticvirtual 或 abstract 來修改 override 方法
重寫屬性聲明必須指定與繼承屬性徹底相同的訪問修飾符類型和名稱而且被重寫的屬性必須是 virtualabstract 或 override 的
標記容許被重寫修飾靜態方法中不容許使用virtual關鍵字成員變量容許使用virtual關鍵字
屬性能夠被聲明爲虛屬性(使用virtual關鍵字)
重寫基類的方法(重寫同名的方法中有virtual關鍵字的方法)
重寫和隱藏的區別隱藏(new關鍵字)是給子類的同名方法分配新的內存空間重寫(override關鍵字)是子類的同名方法放在基類同名方法的原來所在位置基類的同名方法位置向後移
屬性也能夠重寫
virtual關鍵字和override關鍵字是成對出現的不然是語法錯誤
派生類能夠經過將重寫聲明爲 sealed 來中止虛擬繼承這須要在類成員聲明中的 override 關鍵字前面放置 sealed 關鍵字
在子類中重寫基類中的虛方法時可使用base關鍵字調用基類中的虛方法
//使用base關鍵能夠在子類中訪問基類同名的方法
//父類的引用指向子類的實例
Test ts = new Test2();
父類的引用指向子類的實例(調用的是子類的方法)
父類的引用只認識父類的方法不認識子類的新方法能夠用來調用被子類覆蓋的父類的方法
父類的引用依然到父類方法位置去調用若是基類方法被聲明爲virtual而且在子類中被override結果訪問到的是被子類override的方法
C#中的委託是什麼?事件是否是一種委託?
委託能夠把一個方法做爲參數代入另外一個方法。委託能夠理解爲指向一個函數的引用。是,是一種特殊的委託
C#中的堆和棧
棧(Stack)由系統管理生存期,存儲代碼執行和調用路徑,執行或調用完畢即從棧中清除;
堆(Heap)中保存值和對象,調用完畢以後依然存在,由垃圾回收器查找棧中有無指向該值或對象的引用,無則從堆中刪除
你對泛型瞭解嗎?簡單說明一下泛型的有什麼好處?
泛型:經過參數化類型來實如今同一份代碼上操做多種數據類型。利用「參數化類型」將類型抽象化,從而實現靈活的複用
好處是——類型安全和減小裝箱、拆箱。提升性能、類型安全和質量,減小重複性的編程任務
C#中全部對象共同的基類是什麼?
System.Object.
如何在C#中實現繼承?
在類名後加上一個冒號,再加上基類的名稱。
C#支持多重繼承嗎?
不支持。能夠用接口來實現。
被protected修飾的屬性/方法在何處能夠訪問?
在繼承或間接繼承與這個類的子類中能夠訪問。
私有成員會被繼承麼?
會,可是不能被訪問。因此看上去他們彷佛是不能被繼承的,但實際上確實被繼承了。
C#提供一個默認的無參構造函數,當我實現了另一個有一個參數的構造函數時,還想保留這個無參數的構
造函數。這樣我應該寫幾個構造函數?
答:兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,因此須要手動實現那個無參構造
函數。
簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部才能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
public : 公共成員,徹底公開,沒有訪問限制。
internal: 在同一命名空間內能夠訪問。
new的兩種用法
答:實例話對象,隱藏基類方法。
.new有幾種用法
第一種:new Class();
第二種:覆蓋方法
public new XXXX(){}
第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。
3.datagrid.datasouse能夠鏈接什麼數據源 [dataset,datatable,dataview]
dataset,datatable,dataview , IList
類成員有( )種可訪問形式
可訪問性:public ,protected ,private,internal
委託與事件的用法
答:public delegate void handels();//返回值是void,沒有參數
public event handels eventHandels;
his.eventHandels = new handels(fun);
public void fun()
{ }
傳入某個屬性的SET方法的隱含參數的名稱是什麼?
答:value,它的類型和屬性所聲明的類型相同。
string是值類型仍是引用類型?
引用類型
String類與StringBuilder類有什麼區別?爲何在.Net類庫中要同時存在這2個類?(簡答)
stringBuilder比string更節約內存,因此stringBuilder更快
String 對象是不可改變的。每次使用 System.String 類中的方法之一或進行運算時(如賦值、拼接等)時,都要
在內存中建立一個新的字符串對象,這就須要爲該新對象分配新的空間。而 StringBuilder 則不會。在須要對字
符串執行重複修改的狀況下,與建立新的 String 對象相關的系統開銷可能會很是昂貴。若是要修改字符串而不
建立新的對象,則可使用 System.Text.StringBuilder 類。例如,當在一個循環中將許多字符串鏈接在一塊兒時
,使用 StringBuilder 類能夠提高性能。
在C#中,string str = null 與 string str = 「」 請儘可能使用文字或圖象說明其中的區別。
答:string str = null 是不給他分配內存空間,而string str = "" 給它分配長度爲空字符串的內存空間。
ASP.net的身份驗證方式有哪些?分別是什麼原理?
答:Windwos(默認) 用IIS...From(窗體) 用賬戶....Passport(密鑰)
Session有什麼重大BUG,微軟提出了什麼方法加以解決?
答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件
c#中的三元運算符是 ?:
.能用foreach遍歷訪問的對象須要實現()接口或聲明 ( GetEnumerator)方法的類型。
.<%# %> 和 <% %> 有什麼區別?
<%# %>表示綁定的數據源 <% %>是服務器端代碼塊 常量
在.net(C# or vb.net)中如何得到當前窗體或控件的句柄,特別是控件自己的句柄(請列舉)
this(C#) Me(vb.net).
.C#能否對內存進行直接的操做?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員 不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法
DateTime是否能夠爲null?不能,由於其爲Struct類型,而結構屬於值類型,值類型不能爲null,只有引用類型才能被賦值null
DateTime.Parse(myString); 這行代碼有什麼問題?
有問題,當myString不能知足時間格式要求的時候,會引起異常,建議使用DateTime.TryParse()
net的錯誤處理機制是:
採用try->catch->finally結構,
爲何不提倡catch(Exception)
try..catch在出現異常的時候影響性能; 應該捕獲更具體得異常,好比IOExeception,OutOfMemoryException等
catch(Exception e){throw e;}和catch(Exception e){throw;}的區別
將發生的異常對象拋出,另外一個只是拋出異常,並無拋出原異常對象)
error和exception區別:
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
GET與POST的區別
在FORM提交的時候,若是不指定Method,則默認爲GET請求,Form中提交的數據將會附加在url以後,以?分開與url分開。字母數字字符原樣發送,但空格轉換爲「+「號,其它符號轉換爲%XX,其中XX爲該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
在使用 POST 方法的狀況下,傳輸數據時不會將數據做爲 URL 的一部分;它們會做爲一個獨立的實體來傳輸。所以,POST 方法更安全,你也能夠用這個方法傳輸更多的數據。並且用 POST 傳輸的數據不必定要是文本,用 GET 方法傳輸的卻必定要是文本。
(1)get是從服務器上獲取數據,post是向服務器傳送數據。
(1)在客戶端,Get方式在經過URL提交數據,數據在URL中能夠看到;POST方式,數據放置在HTML HEADER內提交。
(2)對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
(2)GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。
(3)安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。因此,若是這些數據是中文數據並且是非敏感數據,那麼使用 get;若是用戶輸入的數據不是中文字符並且包含敏感數據,那麼仍是使用 post爲好。
Bind和Eval函數的區別
綁定表達式
<%# Eval("字段名") %>
<%# Bind("字段名") %>
1 Eval 單向綁定:數據是隻讀的
Bind 雙向綁定:數據能夠更改,並返回服務器端,服務器能夠處理更改後的數據,如存入數據庫.
2.當對次表達式操做時候,必須用Eval 如<%# Eval("字段名").ToString().Trim() %>
3 綁定控件的屬性時要用Bind,而Eval則是其它一些。
例如:<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' />
例如:<td><%# Eval("ProductID") %></td>
Response.Redirect和Server.Transfer
請求的過程:
1)瀏覽器aspx文件請求--->服務器執行--->遇到Response.Redirect語句->服務器發送Response.Redirect後面的地址給客戶機端的瀏覽器--->瀏覽器請求執行新的地址
2)瀏覽器aspx文件請求->服務器執行->遇到Server.Transfer語句->服務器轉向新的文件
能夠見Server.Transfer比Response.Redirect少了一次服務器發送回來和客戶端再請求的過程.
跳轉對象:
1)Response.Redirect能夠切換到任何存在的網頁。
2)Server.Transfer只能切換到同目錄或者子目錄的網頁.
數據保密:
一、Response.Redirect後地址會變成跳轉後的頁面地址。
二、Server.Transfer後地址不變,隱藏了新網頁的地址及附帶在地址後邊的參數值。具備數據保密功能。
傳遞的數據量(網址後附帶的參數):
一、Response.Redirect可以傳遞的數據以2KB(也就是地址欄中地址的最大的長度)爲限。
二、傳遞的數據超過2KB時,務必使用Server.Transfer。
Server.UrlEncode、HttpUtility.UrlDecode的區別
Server.UrlEncode的編碼方式是按照本地程序設置的編碼方式進行編碼的,而HttpUtility.UrlEncode是默認的按照.net的utf-8格式進行編碼的。
Static 和 非Static的區別:
1、用Static聲明的方法和變量,不須要實例化該類就調用;
2、Static的,就必定要用實例化的對象來調用,即用new來實例化。
舉例說:
若是有一個類People,有一個Static的方法MiaoShu(), 調用方法就是 People.MisoShu()
有一個非Static的方法getName(), 調用方法就是 People p= new People(); p.getName();
如何實現鏈接池
確保你每一次的鏈接使用相同的鏈接字符串(和鏈接池相同);只有鏈接字符串相同時鏈接池纔會工做。若是鏈接字符串不相同,應用程序就不會使用鏈接池而是建立一個新的鏈接。
優勢
使用鏈接池的最主要的優勢是性能。建立一個新的數據庫鏈接所耗費的時間主要取決於網絡的速度以及應用程序和數據庫服務器的(網絡)距離,並且這個過程一般是一個很耗時的過程。而採用數據庫鏈接池後,數據庫鏈接請求能夠直接經過鏈接池知足而不須要爲該請求從新鏈接、認證到數據庫服務器,這樣就節省了時間。
缺點
數據庫鏈接池中可能存在着多個沒有被使用的鏈接一直鏈接着數據庫(這意味着資源的浪費)。
技巧和提示
1. 當你須要數據庫鏈接時纔去建立鏈接池,而不是提早創建。一旦你使用完鏈接當即關閉它,不要等到垃圾收集器來處理它。
2. 在關閉數據庫鏈接前確保關閉了全部用戶定義的事務。
3. 不要關閉數據庫中全部的鏈接,至少保證鏈接池中有一個鏈接可用。若是內存和其餘資源是你必須首先考慮的問題,能夠關閉全部的鏈接,而後在下一個請求到來時建立鏈接池。
鏈接池FAQ
1. 什麼時候建立鏈接池?
當第一個鏈接請求到來時建立鏈接池;鏈接池的創建由數據庫鏈接的鏈接字符創來決定。每個鏈接池都與一個不一樣的鏈接字符串相關。當一個新的鏈接請求到來時若是鏈接字符串和鏈接池使用的字符串相同,就從鏈接池取出一個鏈接;若是不相同,就新建一個鏈接池。
2. 什麼時候關閉鏈接池?
當鏈接池中的全部鏈接都已經關閉時關閉鏈接池。
3. 當鏈接池中的鏈接都已經用完,而有新的鏈接請求到來時會發生什麼?
當鏈接池已經達到它的最大鏈接數目時,有新的鏈接請求到來時,新的鏈接請求將放置到鏈接隊列中。當有鏈接釋放給鏈接池時,鏈接池將新釋放的鏈接分配給在隊列中排隊的鏈接請求。你能夠調用close和dispose將鏈接歸還給鏈接池。
4. 我應該如何容許鏈接池?
對於.NET應用程序而言,默認爲容許鏈接池。(這意味着你能夠沒必要爲這件事情作任何的事情)固然,若是你能夠在SQLConnection對象的鏈接字符串中加進Pooling=true;確保你的應用程序容許鏈接池的使用。
5. 我應該如何禁止鏈接池?
ADO.NET默認爲容許數據庫鏈接池,若是你但願禁止鏈接池,可使用以下的方式:
1) 使用SQLConnection對象時,往鏈接字符串加入以下內容:Pooling=False;
2) 使用OLEDBConnection對象時,往鏈接字符串加入以下內容:OLE DB Services=-4;
提升.NET的性能
1 使用異步方式調用Web服務和遠程對象
只要有可能就要避免在請求的處理過程當中對Web服務和遠程對象的同步調用,由於它佔用的是的ASP.NET 線程池中的工做線程,這將直接影響Web服務器響應其它請求的能力。
2 使用適當的Caching策略來提升性能
3 判斷字符串,不要用""比較。
//避免
if(strABC!=null && strABC!="")
{}
//推薦
if(!strABC.IsNullOrEmpty)
{}
4 頁面優化
5 用完立刻關閉數據庫鏈接
6 儘可能使用存儲過程,並優化查詢語句
7 只讀數據訪問用SqlDataReader,不要使用DataSet
……….
.UDP鏈接和TCP鏈接的異同
答:前者只管傳,無論數據到不到,無須創建鏈接.後者保證傳輸的數據準確,需要連結.
請解釋轉發與跳轉的區別
轉發就是服務端的跳轉A頁面提交數據到B頁面,B頁面進行處理而後從服務端跳轉到其它頁面
跳轉就是指客戶端的跳轉
簡述你對XML Web Service的原理的認識?
答:利用SOAP(簡單對象訪問協議)在http上執行遠程方法的調用,也可使用WSDL(Web服務描述語言)來
完成完整的描述Web服務,而後用UDDI註冊各個服務提供商提供的服務,以便共享他們。
什麼叫應用程序域?
答:應用程序域能夠理解爲一種輕量級進程。起到安全的做用。佔用資源小。
CTS、CLS、CLR分別做何解釋?
答:CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言運行庫。
什麼是受管制的代碼?
答:unsafe:非託管代碼。不通過CLR運行。
什麼是強類型系統?
答:RTTI:類型識別系統。
什麼是code-behind技術
codebehind是指代碼和用戶界面分開
aspx and cs
在.net中,配件的意思是?
答:程序集。(中間語言,源數據,資源,裝配清單)
經常使用的調用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項
net Remoting 的工做原理是什麼?
答:服務器端向客戶端發送一個進程編號,一個程序域編號,以肯定對象的位置。
O/R Mapping 的原理
答:利用反射,配置將對象和數據庫表映射
remoting和webservice兩項技術的理解以及實際中的應用。
答:WS主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。
out保留字怎麼使用,何時使用
答:有時爲了從一個函數中返回多個值,咱們須要使用out關鍵字,把輸出值賦給經過引用傳遞給方法的變量(也就是參數)。但C#要求變量再被引用的前必須初始化。在調用該方法時,還須要添加out關鍵字
PDB是什麼東西? 在調試中它應該放在哪裏?
PDB是用於保存調試和項目狀態信息的文件,在debug的時候將產生pdb文件,調試的時候應該放在和對應應用
程序集相同目錄。
使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別?
Web服務使用的消息機制,而Remoting採用的RPC. Web Service能用於不一樣平臺,不一樣語言,Remoting只適用
於.Net。效率上Remoting高於Xml Web Service
類型系統是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?
不清楚
從概念上闡述前期綁定(early-binding)和後期綁定(late-binding)的區別?
這個就像是強弱類型的比較類似,前期綁定是在編譯的時候就肯定了要綁定的數據,然後期綁定是在運行的時候
才填充數據。因此前期綁定若是失敗,會在編譯時報編譯錯誤,然後期綁定失敗只有在運行時的時候才發生
調用Assembly.Load算靜態引用仍是動態引用?
動態
列舉一下你所瞭解的XML技術及其應用
答:保存配置,站與站之間的交流,WEB SERVICE。以及與數據庫的數據交互等地方都要用它.
7.如何理解委託?
答:
至關於函數指針,定義了委託就能夠在不調用原方法名稱的狀況下調用那個方法.
委託具備如下特色:
委託相似於 C++ 函數指針,但它是類型安全的。
委託容許將方法做爲參數進行傳遞。
委託可用於定義回調方法。
委託能夠連接在一塊兒;例如,能夠對一個事件調用多個方法。
方法不須要與委託簽名精確匹配。有關更多信息,請參見協變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法容許將代碼塊做爲參數傳遞,以代替單獨定義的方法。
概述反射和序列化
反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對
象。您可使用反射動態地建立類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。而後,
能夠調用類型的方法或訪問其字段和屬性
序列化:序列化是將對象轉換爲容易傳輸的格式的過程。例如,能夠序列化一個對象,而後使用 HTTP 通
過 Internet 在客戶端和服務器之間傳輸該對象。在另外一端,反序列化將從該流從新構造對象。
11) XmlSerializer是如何工做的?使用這個類的進程須要什麼ACL權限?
我只知道XmlSerializer是將對象的屬性和字段進行序列化和反序列化的,序列化成爲xml數據,反序列化再將xml
轉換成對象。應該至少須要ACL權限中的讀權限.
23)XmlSerializer使用的針對屬性的模式有什麼好處?解決了什麼問題?
只序列化有用的數據,而不是序列化整個對象。實現不必的數據冗餘,和提高序列化時的性能。
26.根據委託(delegate)的知識,請完成如下用戶控件中代碼片斷的填寫:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在如下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );
27.分析如下代碼,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代碼執行完後,i= j=
答:i=13,j=10
28.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號,
LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句得到最後更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29.根據線程安全的相關知識,分析如下代碼,當調用test方法時i>10時是否會引發死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,因此每次改變的都只是一個副本,所以不會出現死鎖。但若是
把int換作一個object,那麼死鎖會發生)