31. 請列出C#中幾種循環的方法,並指出他們的不同
for:一般用於循環次數已知的循環
while: 一般用於循環次數未知的循環,工作原理:先判斷後執行
do…while:一般用於循環次數未知的循環,工作原理:先執行一次後判斷
foreach:當一個序列實現IEnumerable接口或者GetEnumerator()方法時,可以用該循環方法,一般用於遍歷集合或數組,更加安全。
32. 用C#實現以下功能:產生一個int數組,長度爲100,並向其中隨機插入1-100,並且不能重複
namespace Wolfy.RandomDemo
{
class Program
{
static void Main(string[] args)
{
int[] result = GetRandom(100);
for (int i = 0; i < result.Length; i++)
{
Console.WriteLine(result[i]);
}
Console.WriteLine("over:" + result.Length);
Console.Read();
}
/// <summary>
/// 獲得無重複隨機數組
/// </summary>
/// <param name="n">上限n</param>
/// <returns>返回隨機數組</returns>
static int[] GetRandom(int n)
{
//容器A和B
int[] arryA = new int[n];
int[] arryB = new int[n];
//填充容器a
for (int i = 0; i < arryA.Length; i++)
{
arryA[i] = i + 1;
}
//隨機對象
Random r = new Random();
//最後一個元素的索引 如n=100,end=99
int end = n - 1;
for (int i = 0; i < n; i++)
{
//生成隨機數 因爲隨機的是索引 所以從0到100取,end=100
//一個大於等於 minValue 且小於 maxValue 的 32 位帶符號整數,即:返回的值範圍包括 minValue 但不包括 maxValue。
//如果 minValue 等於 maxValue,則返回 minValue
//
int minValue = 0;
int maxValue = end + 1;
int ranIndex = r.Next(minValue, maxValue);
//把隨機數放在容器B中
arryB[i] = arryA[ranIndex];
//用最後一個元素覆蓋取出的元素
arryA[ranIndex] = arryA[end];
//縮減隨機數生成的範圍
end--;
}
//返回生成的隨機數組
return arryB;
}
}
}
34. 簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
WebService特點:
平臺獨立性(Platform-independent)、跨語言(只要能支持XML的語言都可以)以及穿透企業防火牆;Webservice是基於http的是無狀態的;但是它的缺點也很明顯,就是需要部署一臺Web Server;而且速度比較慢;
.Net Remoting的特點是:用戶既可以使用TCP信道進行二進制流方式通信,也可以使用HTTP信道進行SOAP格式的通信,效率相對WebService要高不少;Remoting可以用於有狀態的情況;但是它的缺點也很明顯,.Net Remoting只能應用於MS的.Net Framework之下。
使用場合:
如果互動雙方都是支持.NET技術的環境,並且在操作系統上能提供一致的驗證機制,而且很重視溝通雙方作業的效率,就是.NET Remoting上場的時機。
相反的,如果溝通雙方是異質環境,又或溝通的模式就是無狀態的情況,持續進行的互動作業前後是沒有關聯的,Web Service就是理想選擇了。
35. 根據線程安全的相關知識,分析以下代碼,當調用test方法時i〉10時是否會引起死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i〉10)
{
i--;
test(i);
}
}
}
不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果把int換做一個object,那麼死鎖會發生)
36. 根據委託(delegate)的知識,請完成以下用戶控件中代碼片段的填寫:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(object sender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在以下補齊代碼用來調用OnDBOperate委託簽名的OnNew事件。
}
}
}
}
if( OnNew != null ){
OnNew( );
}
37. NET Remoting 的工作原理是什麼?
在Remoting中是通過通道(channel)來實現兩個應用程序域之間對象的通信。首先,客戶端通過Remoting,訪問通道以獲得服務端對象,再通過代理解析爲客戶端對象。這就提供一種可能性,即以服務的方式來發布服務器對象。遠程對象代碼可以運行在服務器上(如服務器激活的對象和客戶端激活的對象),然後客戶端再通過Remoting連接服務器,獲得該服務對象並通過序列化在客戶端運行。
38. 在.NET中,配件的意思是?
配件就是Assembly(程序集),程序集由程序集清單,類型元數據,MSIL代碼和資源組成。
39. .NET中讀寫文件需要用到那些方法?他們的作用?
1)File類:
使用場合:當讀寫文件大小不大,同時可以一次性進行讀寫操作的時候使用
使用方式:不同的方式可以讀寫文件類型不一樣。
ReadAllBytes() WriteAllByte():可以讀寫任意類型的文件
ReadAllLines() ReadAllText():只能讀寫文本類型文件
2)FileStream類:
使用場合:當讀寫大文件的時候使用,它可以自定義讀寫的數組大小
使用方式:一個流對象只能做一個事情:如果需要讀和寫那麼就需要創建兩個流
讀取:將數據讀取到數組
寫入:將數組的數據再寫入到文件
3)StreamReader/StreamWrite類:
使用場合:只能對文本文件進行讀寫操作
使用方式:它可以按行、按字符以及按塊進行讀取和寫入
40. 在C#中有一個double型的變量,比如10321.5和122235401.21644,作爲貨幣的值如何按各個不同國家的習慣來輸出。比如美國用$10,321.50和$122,235,401.22而在英國則爲£10 321.50和£122 235 401.22
System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-US");
//System.Globalization.CultureInfo MyCulture = new System.Globalization.CultureInfo("en-GB");爲英 國 貨幣類型decimal y = 9999999999999999999999999999m;
string str = String.Format(MyCulture,"My amount = {0:c}",y);
41. 在C#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
using 關鍵字有兩個主要用途:
1)作爲指令,用於爲命名空間創建別名或導入其他命名空間中定義的類型。
2)作爲語句,用於定義一個範圍,在此範圍的末尾將釋放對象。
在 C# 中,new 關鍵字可用作運算符、修飾符或約束。
1)new 運算符:用於創建對象和調用構造函數。這種大家都比較熟悉,沒什麼好說的了。
2)new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。
3)new 約束:用於在泛型聲明中約束可能用作類型參數的參數的類型。