- 分析以下代码:
public static void CheckLength()
{
string str = "abcdefg某某某";
int i = System.Text.Encoding.Default.GetBytes(str).Length;
int j = str.Length;
Console.WriteLine(string.Format("i={0},j={1}",i,j));
}
输出结果是什么?
Answer:i=13,j=10
- Const和readonly区别
const用来声明编译时常量,readonly用来声明运行时常量
- 接口和抽象类的区别
接口中的所有方法必须是抽象的,并且不能指定方法的访问修饰符(默认都是public);抽象类中的方法可以是抽象的,
也可以有具体的实现,也可以指定方法的访问修饰符
- 写sql语句,取出表A中31到40行的记录(使用sql server数据库,以自动增长的id作为主键,该id可能不是连续增长)
solution 1: select top 10 * from A where id not in (select top 30 id from A)
solution 2: select top 10 * from A where id > (select max(id) from (select top 30 id from A) as A)
- dataset 和datareader的区别
datareader和dataset最大的区别在于,datareader使用时始终占用sqlConnection,在线操作数据库。任何对sqlConnection的操作都会引发datareader的异常。因为datareader每次只在内存中加载一条数据,所以占用的内存是很小的。因为datareader的特殊性和高性能,所以datareader是只进的。你读了第一条后就不能再读取第一条了。
dataset则是将数据一次性加载在内存中,抛弃数据库连接。读取完毕即放弃数据库连接。因为dataset将数据全部加载在内存中。所以比较消耗内存。但是比datareader要灵活,可以动态的添加行/列,对数据库进行回传更新操作。
- 在C#中using和new两个关键字有什么意义?
using引入一个命名子空间,或在使用了一个对象后自动调用其IDespose,
New实例化一个对象,或者修饰一个方法,表示完全重写此方法。
- 判断下列代码的输出是什么?(构造函数,static构造函数)【C】
class Class1
{
public static int count = 0; //a
static Class1()
{
count++;//b
}
public Class1()
{
count++;//c
}
static void Main()
{
Class1 c1 = new Class1();//step1
Class1 c2 = new Class1();//step2
Console.WriteLine(count);
Console.ReadKey();
}
}
A:1, B:2, C:3, D:4
分析:程序初始化后首先给static变量赋值,运行a,count=0;
然后,运行static的构造函数,运行b,count=1;
然后,运行step1,对c1初始化,因为count变量已存在,直接运行构造函数c,count=2;
最后,运行step2,对c2初始化,运行构造函数c,count=3;
所以,输出结果为3