c#經(jīng)典筆試題
c#經(jīng)典筆試題
C#是微軟公司發(fā)布的一種面向?qū)ο蟮摹⑦\(yùn)行于.NET Framework之上的高級程序設(shè)計語言。下面就由學(xué)習(xí)啦小編為大家介紹一下c#經(jīng)典筆試題的文章,歡迎閱讀。
c#經(jīng)典筆試題篇1
1. c#中錯誤處理機(jī)制有哪些
CLR提供的結(jié)構(gòu)化錯誤處理機(jī)制,用try..catch..finally 捕獲
2. public/protect/private/internal修飾符的區(qū)別
public:任何類和成員都可以訪問
protect:該類和派生類能訪問
private:只能該類訪問
internal:只能在包含它的程序集中訪問
3. 大量數(shù)據(jù)(如3000萬條數(shù)據(jù))并發(fā)處理時,有哪幾種機(jī)制
存儲過程或事務(wù).取得最大標(biāo)識的時候同時更新,注意主鍵不是自增量方式.這種方法并發(fā)的時候是不會重復(fù)主鍵的,
取得最大標(biāo)識要有一個存儲過程來獲取.
4. String/StringBuilder的異同
string是一個不可變的數(shù)據(jù)類型,一旦對字符串對象進(jìn)行了初始化,該字符串對象就不能改變了。修改字符串內(nèi)容的方法
和運(yùn)算符實際上是創(chuàng)建一個新的字符串.
stringbuilder分配好內(nèi)存,對字符串的修改就在賦予stringbuilder實例的存儲單元中進(jìn)行.
舉例:
string的確是不能修改的:
string str = "a";
str = "b"//str是被賦值了"b"沒錯,但是str里面原來的string值"a"并沒有被修改。
string str = "a";
string str1 = str;
str += "b";//此時str = "ab",str1 = "a";
StringBuilder str = new StringBuilder( "a" );
StringBuilder str1 = str;
str.Append( "b" );
str.ToString()和str1.ToString()都是"ab"。
5. 解釋string str=null/string str=""
str=null,聲明而不分內(nèi)存空間,str=""聲明而分內(nèi)存空間
6. 什么是單例模式,寫個運(yùn)用單例模式的類
Singleton模式包含的角色只有一個,就是Singleton。Singleton擁有一個私有構(gòu)造函數(shù),確保用戶無法通過new直接
實例它
// Singleton pattern -- Structural example
using System;
// "Singleton"
class Singleton
{
// Fields
private static Singleton instance;
// Constructor
protected Singleton() {}
// Methods
public static Singleton Instance()
{
// Uses "Lazy initialization"
if( instance == null )
instance = new Singleton();
return instance;
}
}
/**////
/// Client test
///
public class Client
{
public static void Main()
{
// Constructor is protected -- cannot use new
Singleton s1 = Singleton.Instance();
Singleton s2 = Singleton.Instance();
if( s1 == s2 )
Console.WriteLine( "The same instance" );
}
}
7. ASP.NET頁面間傳遞有哪幾種方式
QueryString, response.Redirect(), session, server.Transfer
8. 解釋重載/覆蓋
9. Web Services的含義/UDDI的含義
Web服務(wù)是利用SOAP在HTTP上執(zhí)行遠(yuǎn)程方法調(diào)用的一種新方法。
UDDI的含義:統(tǒng)一描述發(fā)現(xiàn)和集成(UDDI)提供一種發(fā)布和查找服務(wù)描述的方法。
10.虛函數(shù)/抽象函數(shù)各自的定義
虛函數(shù):由virtual聲明,它允許在派生類中被重寫,要重寫方法,必須先聲名為virtual
public class myclass
{
public virtual int myint()
{
函數(shù)體;
}
}
class myclass1:myclass
{
public override int myint()
{
函數(shù)體1;
}
}
抽象類、抽象函數(shù):由abstract聲明,在抽象類中可以定義抽象方法,抽象方法基本沒有執(zhí)行代碼,派生類必須重寫它,提供其執(zhí)行代碼
public abstract class myclass
{
public abstract int myint();
}
public class myclass1:myclass
{
public override int myint()
{
函數(shù)體;
}
}
c#經(jīng)典筆試題篇2
1.接口和類的異同
接口類:由interface聲明,是特殊的抽象類,是方法、屬性、事件和索引符的組合,沒有字段,其成員無執(zhí)行方式,無構(gòu)造函數(shù),不允許進(jìn)行運(yùn)算符重載,接口和它的成員沒有任何訪問修飾符,它總是公共的,不能聲明為虛擬或靜態(tài),繼承自接口的派生類必須實現(xiàn)接口中的所有方法
interface Imyinterface
{
void myfunction();
string name
{
get;
set;
}
}
class myclass:Imyinterface
{
void myfunction()
{
函數(shù)體;
}
string name
{
get
{
return name;
}
set
{
name=value;
}
}
}
接口是負(fù)責(zé)功能的定義,項目中通過接口來規(guī)范類,操作類以及抽象類的概念!
而類是負(fù)責(zé)功能的具體實現(xiàn)!
在類中也有抽象類的定義,抽象類與接口的區(qū)別在于:
抽象類是一個不完全的類,類里面有抽象的方法,屬性,也可以有具體的方法和屬性,需要進(jìn)一步的專業(yè)化。
但接口是一個行為的規(guī)范,里面的所有東西都是抽象的!
一個類只可以繼承一個基類也就是父類,但可以實現(xiàn)多個接口
2.property/assembly區(qū)別
3.DataReader/DataSet區(qū)別
dataset表示一個數(shù)據(jù)集,是數(shù)據(jù)在內(nèi)存中的緩存。 可以包括多個表
DatSet 連接數(shù)據(jù)庫時是非面向連接的。把表全部讀到Sql中的緩沖池,并斷開于數(shù)據(jù)庫的連接
datareader 連接數(shù)據(jù)庫時是面向連接的。讀表時,只能向前讀取,讀完數(shù)據(jù)后有用戶決定是否斷開連接。
4.using/new各自的意義
using引入名稱空間或者說使用非托管資源new 新建實例或隱藏父類方法
5.一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數(shù)是多少, 用遞歸算法實現(xiàn)
public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
6.C#中的委托是什么?事件是不是一種委托?
委托可以把一個方法作為參數(shù)代入另一個方法。
委托可以理解為指向一個函數(shù)的引用。
是,是一種特殊的委托
7.override與重載的區(qū)別
重載是方法的名稱相同。參數(shù)或參數(shù)類型不同,進(jìn)行多次重載以適應(yīng)不同的需要
Override 是進(jìn)行基類中函數(shù)的重寫
8.如果在一個B/S結(jié)構(gòu)的系統(tǒng)中需要傳遞變量值,但是又不能使用Session、Cookie、Application,您有幾種方法進(jìn)行處理?
QueryString、FormsAuthentication,Server.Transfer
9.請編程遍歷頁面上所有TextBox控件并給它賦值為string.Empty?
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
tb.Text = String.Empty ;
}
}
foreach (System.Windows.Forms.Control controlinthis.Controls)
{
if (controlis System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = controlas System.Windows.Forms.TextBox ;
if(tb!=null)
{
tb.Text = String.Empty ;
}
}
}
10.請編程實現(xiàn)一個冒泡排序算法?
int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
c#經(jīng)典筆試題篇3
1.描述一下C#中索引器的實現(xiàn)過程,是否只能根據(jù)數(shù)字進(jìn)行索引?
可以用任意類型
C#中的索引器通常用于索引數(shù)組,樓上的THIS就是索引器了。
索引器不單能索引數(shù)字(數(shù)組下標(biāo)),還能索引一些HASHMAP的字符串,所以,通常來說,C#中類的索引器通常只有一個,就是THIS,但也可以有無數(shù)個,只要你的參數(shù)列表不同就可以了
索引器和返回值無關(guān)
class A
{
int[] i=new int[10];
publib int this[int v]
{
return i[v];
}
2.求以下表達(dá)式的值,寫出您想到的一種或幾種實現(xiàn)方法: 1-2+3-4+……+m
if(m%2 == 1){
S = (m + 1) / 2;
} else {
S = -m / 2;
}
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++)
{
if((i%2) == 1)
{
Sum += i ;
}
else
{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
3.
using System;
class A
{
public A()
{
PrintFields();
}
public virtual void PrintFields(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void PrintFields()
{
Console.WriteLine("x={0},y={1}",x,y);
}
}
當(dāng)使用new B()創(chuàng)建B的實例時,產(chǎn)生什么輸出? X=1,Y=0;x= 1 y = -1
4..什么叫應(yīng)用程序域?
應(yīng)用程序域可以理解為一種輕量級進(jìn)程。起到安全的作用。占用資源小。
5.CTS、CLS、CLR分別作何解釋?
CTS:通用語言系統(tǒng)。CLS:通用語言規(guī)范。CLR:公共語言運(yùn)行庫。
6.什么是裝箱和拆箱?
從值類型接口轉(zhuǎn)換到引用類型裝箱。從引用類型轉(zhuǎn)換到值類型拆箱。
7.什么是受管制的代碼?
unsafe:非托管代碼。不經(jīng)過CLR運(yùn)行。
8.什么是強(qiáng)類型系統(tǒng)?
RTTI:類型識別系統(tǒng)。
9.在.net中,配件的意思是?
程序集。(中間語言,源數(shù)據(jù),資源,裝配清單)
10.常用的調(diào)用WebService的方法有哪些?
1.使用WSDL.exe命令行工具。
2.使用VS.Net中的Add Web Reference菜單選項