小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C#綜合筆試題下(上)

 命運之輪 2010-04-30

1.面向對象的思想主要包括什么?

繼承多態(tài)封裝

●封裝:用抽象的數據類型將數據和基于數據的操作封裝在一起,數據被保護在抽象數據類型內部。

●繼承:子類擁有父類的所有數據和操作。

●多態(tài):一個程序中同名的不同方法共存的情況。

有兩種形式的多態(tài)–重載與重寫。

 

2.什么是ASP.net中的用戶控件

用戶控件就是.ascx擴展名的東西嘍,可以拖到不同的頁面中調用,以節(jié)省代碼.比如登陸可能在多個頁面上有,就可以做成

用戶控件,但是有一個問題就是用戶控件拖到不同級別的目錄下后里面的圖片等的相對路徑會變得不準確,需要自已寫方

法調整.

問這樣的問題,一般是迷惑你.因為新手還是分不清楚用戶控件和服務器控件(也稱自定義控件)..用戶控件一般用在內容多

為靜態(tài),或者少許會改變的情況下..用的比較大..類似ASP中的include..但是功能要強大的多..

在C#中,string str = null 與 string str = “”的區(qū)別。
答:string str = null 是不給他分配內存空間,而string str = "" 給它分配長度為空字符串的內存空間
請詳述在dotnet中類(class)與結構(struct)的異同
Class可以被實例化,屬于引用類型,是分配在內存的堆上的,Struct屬于值類型,是分配在內存的棧上的.

DataReader和DataSet的異同
DataReader和DataSet最大的區(qū)別在于,DataReader使用時始終占用SqlConnection,在線操作數據庫..任何對SqlConnection

的操作都會引發(fā)DataReader的異常..因為DataReader每次只在內存中加載一條數據,所以占用的內存是很小的..因

為DataReader的特殊性和高性能.所以DataReader是只進的..你讀了第一條后就不能再去讀取第一條了..
DataSet則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接..因為DataSet將數據全部加載在

內存中.所以比較消耗內存...但是確比DataReader要靈活..可以動態(tài)的添加行,列,數據.對數據庫進行回傳更新操作.

8.C#中的接口和類有什么異同。

接口和類都是類,不同的事,接口只包含方法或屬性的聲明,不包含具體實現方法的代碼,接口可以實現多繼承,而類

只能是單繼承,繼承接口的類必須實現接口中聲明的方法或屬性。接口主要定義一種規(guī)范,統(tǒng)一調用方法,在大型項目

中接口正發(fā)揮日益重要的作用

類是方法功能的實現和集合,接口是規(guī)范類.約束類.
接口,是可以多繼承,類只有單繼承.接口強調了你必須實現,而沒有具本實現的方法和虛類有點相似

Override與重載有什么區(qū)別?
一個是重寫父類函數,一個是同一個函數的幾種形式

觸發(fā)器的作用

觸發(fā)器可以查詢其它表,而且可以包含復雜的 SQL 語句。它們主要用于強制復雜的業(yè)務規(guī)則或要求。觸發(fā)器還有助于

強制引用完整性,以便在添加、更新或刪除表中的行時保留表之間已定義的關系。
保證數據庫操作變更能接到通知

<%# %> 和 <% %> 有什么區(qū)別?
<%# %>表示綁定的數據源
<% %>是服務器端代碼塊

常見的設計模式

抽象工廠模式、適配器模式、外觀模式 command命令模式,橋接模式,組合模式,裝飾模式,狀態(tài)模式,備忘錄模式等。
軟件設計模式太多,就我的理解簡單說一下最常見的MVC模式。
MVC模式是1996年由Buschmann提出的:
模型(Model):就是封裝數據和所有基于對這些數據的操作。
視圖(View):就是封裝的是對數據顯示,即用戶界面。
控制器(Control):就是封裝外界作用于模型的操作和對數據流向的控制等。

 

3.什么叫應用程序域?什么是受管制的代碼?什么是強類型系統(tǒng)?什么是裝箱和拆箱?什么是重載?CTS、CLS和CLR分

別作何解釋?

 

4.列舉一下你所了解的XML技術及其應用

 

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

在dotnet中有兩大類數據類型,即值類型和引用類型,值類型存貯在棧中,而引用類型存貯在動態(tài)的堆中,棧是先進先

出的有系統(tǒng)管理的空間,而堆是由應用程序控制的可隨時申請和釋放該空間,在Donnet中一般情況下有垃圾收集器處理

,他們的不同導致在編程上的不同。
        例:                     StringBuilder a=new StringBuilder();//將StringBuilder的一個首地址傳給a
                                     StringBuilder b=a;//將StringBuilder的一個首地址傳給b
                                      b.Append("mxh");
                                      Console.WriteLine(a);
                                       a=null;
                                       Console.WriteLine(b);
               輸出結果:mxh
                                   mxh
       "a=null"的意思是:a的引用置為空但此時StringBuilder的堆空間并沒有被釋放,因此在此之后,輸出b時,仍然可以

輸出mxh

 

6.ADO.net中常用的對象有哪些?分別描述一下。
DataSet對象:表示內存中數據的緩存,可以把它想像成一個臨時的數據庫,它里可以存多個表(DataTable),而且是斷開式的,不用每進行一次操作就對數據庫進行更新,從而提高了效率。
DataReader對象:它與DataSet最大的不同是有連接式的,每次對數據庫進行存取都會影響到數據庫。
Connection對象:用于連接數據庫的對象,表示到數據源的一個唯一的連接。
Command對象:表示要對數據庫執(zhí)行的一個SQL語句或一個存儲過程。
DataAdapter對象:該對象是與DataSet配合使用的對象,用于把表填充到DataSet,和更新DataSet等。

 

7.如何理解委托?

 

C# 中的委托類似于 C 或 C++ 中的函數指針。使用委托使程序員可以將方法引用封裝在委托對象內。然后可以將該委托

對象傳遞給可調用所引用方法的代碼,而不必在編譯時知道將調用哪個方法。與 C 或 C++ 中的函數指針不同,委托是

面向對象、類型安全的,并且是安全的。

 

9.。net中讀寫數據庫需要用到哪些類?他們的作用

 

10.UDP連接和TCP連接的異同。

 

11.ASP.net的身份驗證方式有哪些?分別是什么原理?

window驗證:為每個用戶開啟window賬號,驗證其身份.安全性較高.
forms驗證:為每個登陸用戶寫入一個身份驗證票據..在web使用最廣的驗證方式..靈活方便.

 

12.進程和線程分別怎么理解?

 

13.什么是code-Behind技術。

新建一個VS.NET下的項目..看到ASPX,RESX和CS三個后綴的文件了嗎??這個就是代碼分離.實現了HTML代碼和服務器代

碼分離.方便代碼編寫和整理.

 

14.活動目錄的作用。

活動目錄是window2000的最重要的功能.可以將用戶信息全部集成起來,登陸以后可以訪問多個不同的網絡服務..

.

15..net中讀寫XML的類都歸屬于哪些命名空間?

System.XML類

 

16.解釋一下UDDI、WSDL的意義及其作用。

 

17.什么是SOAP,有哪些應用。

simple object access protocal,簡單對象接受協議.以xml為基本編碼結構,建立在已有通信協議上(如http,不過據說ms在搞最

底層的架構在tcp/ip上的soap)的一種規(guī)范
是微軟大力推廣的Web Service使用的協議..

 

18.如何部署一個ASP.net頁面。

 

19.如何理解.net中的垃圾回收機制。

 

如果發(fā)現內存不夠,則垃圾回收器,將全部對象作為無效對象(被回收對象),然后先將全局變量,static,處于活動中的局部變

量,以及當前CG指針指向的對象放入一個表中.然后
會搜索新列表中的對象所引用的對象.加入列表中,其他沒有被加入列表的對象都會被回收.

 

20.常用的調用webservice方法有哪些?

我一般用的是WSDL..或者web引用..

 

21列舉一下你所了解的XML技術及其應用
.xml可以用來做網頁(xslt) xml可以當作數據庫 xml可以用來保存對象的系列化
xml用于配置,用于保存靜態(tài)數據類型.接觸XML最多的是web Services..和config

 

C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機制的好處在哪里?
一個是屬性,用于存取類的字段,一個是特性,用來標識類,方法等的附加性質

 

C#可否對內存進行直接的操作?
可以

維護數據庫的完整性、一致性、你喜歡用觸發(fā)器還是自寫業(yè)務邏輯?為什么

 

觸發(fā)器,性能好,事務性

ADO。NET相對于ADO等主要有什么改進?

新增dataset等,不需要隨時保持連接,性能提高

 

ASP。NET與ASP相比,主要有哪些進步?
asp解釋型,aspx編譯型,性能提高,有利于保護源碼

 

C#中的委托是什么?事件是不是一種委托?
委托是一種安全的函數指針,事件是一種消息機制

 

你對XMLHTTP、WEBSERVICE 了解嗎?簡單描述其特點、作用
xmlhttp可以主動獲取遠端web代碼,類似HttpWebRequest

接口和抽象類有什么區(qū)別?你選擇使用接口和抽象類的依據是什么?
接口用于規(guī)范,抽象類用于共性。

存儲過程和函數的區(qū)別
存儲過程是編譯好的存儲在數據庫的操作,函數不用說了.

事務是什么?
具有原子性特點

游標的作用?如何知道游標已經到了最后?
指示當前記錄的位置,檢查NULL

觸發(fā)器分為事前觸發(fā)和事后觸發(fā),這兩種觸發(fā)有和區(qū)別。語句級觸發(fā)和行級觸發(fā)有何區(qū)別。
一個是操作前,一個是操作后

請說明在.net中常用的幾種頁面間傳遞參數的方法,并說出他們的優(yōu)缺點。
session(viewstate) 簡單,但易丟失
application 全局
cookie 簡單,但可能不支持,可能被偽造
input type="hidden" 簡單,可能被偽造
url參數 簡單,顯示于地址欄,長度有限
數據庫 穩(wěn)定,安全,但性能相對弱

請說明.net中的錯誤處理機制,并舉例
try catch final

請說出強名的含義
具有自己的key,可以在GAC為公用

請列出c#中幾種循環(huán)的方法,并指出他們的不同
for wile foreach

請指出.net中所有類型的基類
object

請指出GAC的含義
全局程序集緩存

值類型與引用類型有什么區(qū)別?
值和指針的區(qū)別

怎樣理解靜態(tài)變量?
所有實例公用一個的變量

向服務器發(fā)送請求有幾種方式?
get post

如果在一個B/S結構的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進行處理

?
input type=""
url
數據庫

用.net做B/S結構的系統(tǒng),您是用幾層結構來開發(fā),每一層之間的關系以及為什么要這樣分層?
三層,表現,邏輯,數據, 安全性,維護性

軟件開發(fā)過程一般有幾個階段?每個階段的作用?
需求分析,架構設計,代碼編寫,QA,部署

通過超鏈接怎樣傳遞中文參數?
URLEncode URLDecode

請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty
foreach

有哪幾種方法可以實現一個類存取另外一個類的成員函數及屬性,并請舉列來加以說明和分析.
同一個名稱控件直接,或者反射

如果需記錄類的實例個數,該如何實現,請寫一個簡單的類于以證明.
const static int classNum=0;
classNum++;

A類是B類的基類,并且都有自己的構造,析構函數,請舉例證明B類從實例化到消亡過程中構造,析構函數的執(zhí)行過程.
構造先父后子,析夠反之

需要實現對一個字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保留一個空格,即允

許字符串中間有多個空格,但連續(xù)的空格數不可超過一個.
string inputStr=" xx xx ";
inputStr=Regex.Replace(inputStr.Trim()," *"," ");

在c#中using和new這兩個關鍵字有什么意義,請寫出你所知道的意義?

using 指令 和語句 new 創(chuàng)建實例 new 隱藏基類中方法
using 引入名稱空間或者使用非托管資源
new 新建實例或者隱藏父類方法

談談類和結構的區(qū)別?
類是引用類型、結構是值類型

什么叫做SQL注入,如何防止?請舉例說明。
利用sql關鍵字對網站進行攻擊。過濾關鍵字'等

下面這段代碼輸出什么?為什么?
int i=5;
int j=5;
if (Object.ReferenceEquals(i,j))
Console.WriteLine("Equal");
else
Console.WriteLine("Not Equal");

寫一個實現對一段字符串翻轉的方法,附加一些條件,如其中包括“,”、“.”,對其設計測試用例
inputStr=inputStr.ToCharArray().Reverse().ToString();

什么是反射?
動態(tài)獲取程序集信息

用Singleton如何寫設計模式
static屬性里面new ,構造函數private

C#中的垃圾回收機制是怎樣的?
三個generation,當每個generation內存滿了的時候檢查引用,無引用就回收內存

什么是Application Pool?
Web應用,類似Thread Pool,提高并發(fā)性能

鏈表和數組的區(qū)別,各有什么優(yōu)缺點.
一個可以動態(tài)增長,一個固定(VB中可以Redim),性能數組教好

什么是友元函數?
friendly聲明,可以訪問protect級別方法

什么是虛函數?
可以被重寫

什么是抽象函數?
必須被重寫

什么是內存泄漏,怎樣最簡單的方法判斷被存泄漏 ?
C++,C中忘了釋放內存,內存不會再次分配

1SQL Server的兩種索引是何形式?索引的作用?索引的優(yōu)缺點?
cluster和非cluster,加速查找,占用額外控件,維護索引耗費時間

什么是XML?
可擴展標記語言,可以做配置文件,可以傳輸數據,可以存儲數據

簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 在同一命名空間內可以訪問。

進程和線程的區(qū)別

進程是系統(tǒng)進行資源分配和調度的單位;線程是CPU調度和分派的單位,一個進程可以有多個線程,這些線程共享這個

進程的資源。

成員變量和成員函數前加static的作用

它們被稱為常成員變量和常成員函數,又稱為類成員變量和類成員函數。分別用來反映類的狀態(tài)。比如類成員變量可以

用來統(tǒng)計類實例的數量,類成員函數負責這種統(tǒng)計的動作。

malloc和new的區(qū)別

new是C++的關鍵字。malloc在分配內存時必須按給出的字節(jié)分配,new可以按照對象的大小自動分配,并且能調用構造

函數??梢哉fnew是對象的對象,而malloc不是。本質上new分配內存時,還會在實際內存塊的前后加上附加信息,所

以new所使用的內存大小比malloc多。

堆和棧的區(qū)別

棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上。
棧是機器系統(tǒng)提供的數據結構,而堆則是C/C++函數庫提供的。
棧是系統(tǒng)提供的功能,特點是快速高效,缺點是有限制,數據不靈活;而棧是函數庫提供的功能,特點是靈活方便,數

據適應面廣泛,但是效率有一定降低。棧是系統(tǒng)數據結構,對于進程/線程是唯一的;堆是函數庫內部數據結構,不一

定唯一。不同堆分配的內存無法互相操作。??臻g分靜態(tài)分配和動態(tài)分配兩種。靜態(tài)分配是編譯器完成的,比如自動變

量(auto)的分配。動態(tài)分配由alloca函數完成。棧的動態(tài)分配無需釋放(是自動的),也就沒有釋放函數。為可移植的程序

起見,棧的動態(tài)分配操作是不被鼓勵的!堆空間的分配總是動態(tài)的,雖然程序結束時所有的數據空間都會被釋放回系統(tǒng)

,但是精確的申請內存/釋放內存匹配是良好程序的基本要素。

在.Net中,類System.Web.UI.Page 可以被繼承么?
可以

你覺得ASP.NET 2.0(VS2005)和你以前使用的開發(fā)工具(.Net 1.0或其他)有什么最大的區(qū)別?你在以前的平臺上使

用的哪些開發(fā)思想(pattern / architecture)可

1 ASP.NET 2.0 把一些代碼進行了封裝打包,所以相比1.0相同功能減少了很多代碼.
2 同時支持代碼分離和頁面嵌入服務器端代碼兩種模式,以前1.0版本,.NET提示幫助只有在分離的代碼文件,無法在頁面嵌

入服務器端代碼獲得幫助提示,
3 代碼和設計界面切換的時候,2.0支持光標定位.這個我比較喜歡
4 在綁定數據,做表的分頁.UPDATE,DELETE,等操作都可以可視化操作,方便了初學者
5, 在ASP.NET中增加了40多個新的控件,減少了工作量

.net的錯誤處理機制是什么
.net錯誤處理機制采用try->catch->finally結構,發(fā)生錯誤時,層層上拋,直到找到匹配的Catch為止。

重載與覆蓋的區(qū)別
1、方法的覆蓋是子類和父類之間的關系,是垂直關系;方法的重載是同一個類中方法之間的關系,是水平關系。
2、覆蓋只能由一個方法,或只能由一對方法產生關系;方法的重載是多個方法之間的關系。
3、覆蓋要求參數列表相同;重載要求參數列表不同。
4、覆蓋關系中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關系,是根據調用時的

實參表與形參表來選擇方法體的。

簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進制傳送提高效率。

C#中的委托是什么?事件是不是一種委托?
委托是一種安全的函數指針,事件是一種消息機制

new有幾種用法
第一種:new Class();
第二種:覆蓋方法
public new XXXX(){}
第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。
如何把一個array復制到arrayList里
foreach( object o in array )arrayList.Add(o);
datagrid.datasouse可以連接什么數據源
dataset,datatable,dataview , IList
概述反射和序列化
反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使

用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后,可以調用類型的方法或訪問

其字段和屬性
序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然后使用 HTTP 通過 Internet 在客

戶端和服務器之間傳輸該對象。在另一端,反序列化將從該流重新構造對象。
概述o/r mapping 的原理>
利用反射,配置 將類于數據庫表映射
用sealed修飾的類有什么特點
sealed 修飾符用于防止從所修飾的類派生出其它類。如果一個密封類被指定為其他類的基類,則會發(fā)生編譯時錯誤。
密封類不能同時為抽象類。
sealed 修飾符主要用于防止非有意的派生,但是它還能促使某些運行時優(yōu)化。具體說來,由于密封類永遠不會有任何派

生類,所以對密封類的實例的虛擬函數成員的調用可以轉換為非虛擬調用來處理。

什么叫應用程序域?什么是受管制的代碼?什么是強類型系統(tǒng)?什么是裝箱和拆箱?什么是重載?CTS、CLS和CLR分別

作何解釋?
答:裝箱就是把值類型轉成引用類型,從MS IL角度看好像是boxing,沒記錯的話是把值從堆棧轉到堆中.拆箱相反,重載就是

指一個方法名同,參數個數不同,返回值可以相同的方法.CLR是通用語言運行時,其它的不清楚.
如何理解委托?
答:據說相當于函數指針,定義了委托就可以在不調用原方法名稱的情況下調用那個方法.
委托具有以下特點:
委托類似于 C++ 函數指針,但它是類型安全的。
委托允許將方法作為參數進行傳遞。
委托可用于定義回調方法。
委托可以鏈接在一起;例如,可以對一個事件調用多個方法。
方法不需要與委托簽名精確匹配。有關更多信息,請參見協變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數傳遞,以代替單獨定義的方法。
UDP連接和TCP連接的異同。
前者只管傳,不管數據到不到,無須建立連接.后者保證傳輸的數據準確,須要連結.
進程和線程分別怎么理解?
進程是老子,線程是兒子,沒有老子就沒有兒子,一個老子可以有多個兒子.一個兒子可以成為別人的兒子,一個老子也可以

為別的老子生兒子.
什么是SOAP,有哪些應用。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠程過程調用

的協議,是一個基于XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議),可以允許任

何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。這種相互通信采用的是XML格式的消息.

1. 填空: (1)面向對象的語言具有___繼承性、封裝性、多態(tài)性。

(2)能用foreach遍歷訪問的對象需要實現 IEnumerable接口或聲明GetEnumerator 方法的類型

      (3)列舉ADO.net中的五個主要對象

Command、Connection、DataSet、DataAdapter、DataReader。

 

2. 不定項選擇:

 

(1) 以下敘述正確的是:

 

      A. 接口中可以有虛方法。     B. 一個類可以實現多個接口。

      C. 接口不能被實例化。       D. 接口中可以包含已實現的方法。

 

(2) 從數據庫讀取記錄,你可能用到的方法有:

 

      A. ExecuteNonQuery            B. ExecuteScalar

 

      C. Fill                        D. ExecuteReader

 

3. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。

 

 

4. 寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作為主鍵, 注意:ID

可能不是連續(xù)的。)

 

 

5 .列舉ASP.NET 頁面之間傳遞值的幾種方式。

 

三種比較常見的方式,一種是可以通過用QueryString來傳送相應的值,再一種是通過session變量來傳送相應的值,還有

就是通過Server.Transfer方法來實現

 

(1)queryString  
(2)session  
(3)cookie  
(4)server.transfer  
(5)hidden   control/view   state  
(6)static   member.  
(7)cache  
(8)application  
(9)DataBase  
(10)xml   or   other   Files  
(11)XMLHTTP   or   Hidden   iFrame/frame  
(12)Context.user.identity  
   
我正在做一個通用提示葉面,所有葉面出現問題都要,傳遞幾個變量字符串到同一個葉面 hitMsg.aspx 變量字符串包括

提示語言,即將跳轉的葉面,跳轉時間。在1-11種方案中哪個更好些?  
(1)queryString的毛病是無法傳遞很長字符串,比如系統(tǒng)錯誤信息往往就一整個屏幕。  
(2)session的毛病是不能過多使用,依賴Cookie,容易丟失。  
(3)cookie的毛病是依賴客戶端設置,不可靠。  
(4)server.transfer的毛病是接收葉面要為發(fā)送葉面準備好,只能定制專門一個葉面接受定制好的葉面。  
不能是一個葉面接受任何葉面。  
(5)hidden   control/view   state只能傳遞本頁。除非特殊制作。  
(6)static   member.無法保證線程安全,可能會此處栽瓜他處得豆。  
(7)cache不適合使用一次就扔的變量。  
(8)application全局的,開銷大。  
(9)DataBase全局固化的,開銷更大,除非做日志跟蹤。  
(10)xml   or   other   Files全局固化的,開銷大,除非做日志跟蹤。  
(11)XMLHTTP   or   Hidden   iFrame/frame,做這個過于煩瑣。  
(12)Context這個占用了用戶id,不適合做這個。

 

6. 寫出程序的輸出結果

 

class Class1 {

       private string str = "Class1.str";

       private int i = 0;

       static void StringConvert(string str) {

           str = "string being converted.";

       }

       static void StringConvert(Class1 c) {

           c.str = "string being converted.";

       }

       static void Add(int i) {

           i++;

       }

       static void AddWithRef(ref int i) {

           i++;

       }

       static void Main() {

           int i1 = 10;

           int i2 = 20;

           string str = "str";

           Class1 c = new Class1();

           Add(i1);

           AddWithRef(ref i2);

           Add(c.i);

           StringConvert(str);         

           StringConvert(c);

           Console.WriteLine(i1);

           Console.WriteLine(i2);

           Console.WriteLine(c.i);

           Console.WriteLine(str);

           Console.WriteLine(c.str);

       }  

    }

 

 

7.寫出程序的輸出結果

 

public abstract class A  

{

        public A()  

       {

            Console.WriteLine('A');

        }

        public virtual void Fun()  

       {

            Console.WriteLine("A.Fun()");

        }

}

 

public class B: A  

{

        public B()

       {

            Console.WriteLine('B');

        }

 

        public new void Fun()  

       {

            Console.WriteLine("B.Fun()");

        }

 

        public static void Main()  

       {

           A a = new B();

           a.Fun();

        }

}

 

 

8.      寫出程序的輸出結果:

public class A  

{

        public virtual void Fun1(int i)

       {

           Console.WriteLine(i);

        }

 

        public void Fun2(A a)   

       {

            a.Fun1(1);

            Fun1(5);

        }

}

 

 

public class B : A  

{

        public override void Fun1(int i)    

       {

            base.Fun1 (i + 1);

        }

 

        public static void Main()   

       {

            B b = new B();

            A a = new A();

            a.Fun2(b);

            b.Fun2(a);          

        }

}

 

 

 

9. 一列數的規(guī)則如下: 1、1、2、3、5、8、13、21、34......

求第30位數是多少,用遞歸算法實現。(C#語言)

-------------------------------------------

a0   =   0,a1   =   1,An   =   An-1   +   An-2(n>=2)  
int[]   iArray   =   new   int[31];  
iArray[0]   =   0;  
iArray[1]   =   1;  
   
for   (int   i   =   2;   i   <=   30;   i++)  
{  
        iArray[i]   =   iArray[i   -   1]   +   iArray[i   -   2];  
}  
   ---------------參考答案二---------------------------------

int   i=0,ii=1,s=1,num=0;  
while(num<=30)  
{  
s=i+ii;  
Response.Write(i+"+"+ii+"="+s+"<br>");  
if(s==1)  
{  
i=1;  
}  
else  
{  
i=s-i;  
}  
ii=s;  
num++;  
}

========================

 

10. 程序設計: 貓大叫一聲,所有的老鼠都開始逃跑,主人被驚醒。(C#語言)

 

要求: 1.要有聯動性,老鼠和主人的行為是被動的。

 

2.考慮可擴展性,貓的叫聲可能引起其他聯動效應。

三個類,貓,老鼠和主人

 

public sealed class Cat

{

   // 貓叫時引發(fā)的事件

   public event EventHandler Calling;

 

   public void Call()

   {

       Console.WrietLine("貓叫了...");

       if(Calling != null) // 檢查是否有事件注冊

           Calling(this, EventArgs.Empty); // 調用事件注冊的方法。

   }

}

// 老鼠,提供一個方法表示逃跑

public sealed calss Mouse

{

    public void Escape(object sender, EventArgs e)

    {

         Console.WriteLine("老鼠逃跑了...");

    }

}

 

// 主人,發(fā)生貓叫的時候驚醒

public sealed class Master

{

    public void Wakened(object sender, EventArgs e)

    {

        Console.WriteLine("主人驚醒了...);

    }

}

// 用于測試的執(zhí)行方法

// 程序入口點

public static Program

{

    public static int Main(string[] args)

    {

        // 建立貓

        Cat cat = new Cat();

        // 建立老鼠

        Mouse mouse = new Mouse();

        // 建立主人

        Master master = new Master();

     

        // 注冊事件

        cat.Calling += new EventHandler(mouse.Escape);

        cat.Calling += new EventHandler(master.Wakened);

 

        // 貓開始叫

        cat.Call();

    }

}

 

要點:1. 聯動效果,運行代碼只要執(zhí)行Cat.Cryed()方法。2. 對老鼠和主人進行抽象
評分標準: <1>.構造出Cat、Mouse、Master三個類,并能使程序運行(2分)
                 <2>從Mouse和Master中提取抽象(5分)
                 <3>聯動效應,只要執(zhí)行Cat.Cryed()就可以使老鼠逃跑,主人驚醒。(3分)


    public interface Observer
    {
        void Response();    //觀察者的響應,如是老鼠見到貓的反映
    }
    public interface Subject
    {
        void AimAt(Observer obs); //針對哪些觀察者,這里指貓的要撲捉的對象---老鼠
    }
    public class Mouse : Observer
    {
        private string name;
        public Mouse(string name, Subject subj)
        {          
            this.name = name;
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine(name + " attempt to escape!");
        }
    }
    public class Master : Observer
    {  
        public Master(Subject subj)
        {          
            subj.AimAt(this);
        }
       
        public void Response()
        {
            Console.WriteLine("Host waken!");
        }
    }

    public class Cat : Subject
    {
        private ArrayList observers;
        public Cat()
        {  
            this.observers = new ArrayList();
        }
        public void AimAt(Observer obs)
        {
            this.observers.Add(obs);
        }
        public void Cry()
        {
            Console.WriteLine("Cat cryed!");
            foreach (Observer obs in this.observers)
            {
                obs.Response();
            }
        }
    }
    class MainClass
    {      
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse mouse1 = new Mouse("mouse1", cat);
            Mouse mouse2 = new Mouse("mouse2", cat);
            Master master = new Master(cat);
            cat.Cry();
        }
    }

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多