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 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。