面试知识点整理(一)
1.public static const int A=1;这段代码有错误么?是什么?
const不能有static修饰,因为const本身就是一个静态声明的量。
★★(如果变量是 const,它也就是 static。
如果需要一个既是 const 又是 static 的变量,只需将该变量声明为 const;
如果需要的只是 static 变量,只需将其标记为 static。)
★★一定不会变的量,声明为常量。只要在变量前面加上const即可。
★★类,结构,接口成员声明中的标记"()","="无效
★★赋值号左边必须是变量,属性或索引器
调用类中声明的常量,可以用类名.常量名得方法进行调用
.NET自带了声明圆周率的常量 Math(类名).PI(常量名)
2.C#中三元运算符是?( ?:)
//三元运算符 i==5?"是":"否"
int inti = 5;
string strsub2 = (inti == 5 ? "是" : "否");
Console.WriteLine(strsub2);
★★由此可以引申出开关原理。
3.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?
new 创建实例,new 隐藏基类中方法,using引入命名空间或者使用非托管资源。
4.String s = new String("xyz");创建了几个String Object? (考察的是:对象的引用)
两个对象.一个是是xyz,一个是指向xyz引用的s。
★★字符串是引用类型的,通过变量来进行指向的。
★★
String s = new String("xyz");
String str="xyz";
String str1 = new String("a");
//第二个是创建一个str对象,指向在内存空间存在的xyz
//是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str1
★★前面所说的是引用类型,那么int是什么类型呢?
int datetime,bool,char等类型都属于值类型(ValueType),赋值的时候是传递拷贝
普通的对象则是引用类型,赋值的时候是传递引用。我指向谁,兄弟你也来指向。
★★一个对象会占很大的内存,是大家共用一份。
5.在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别
string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
6.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
定义一个索引器必须使用this关键字,如this[index]。可以是任意类型索引。
7.简述 private、 protected、 public、 internal 修饰符的访问权限
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
8.下面这段代码有错误么?
switch (i)
{
case(): 答: //case()条件不能为空
CaseZero();
break;
case 1:
CaseOne();
break;
case 2:
dufault; //格式不正确,应写成default:
CaseTwo();
break;
}
★★正确的代码应该这样写
string i = Console.ReadLine();
switch (i)
{
case ("01"):
Console.WriteLine("您好01");
break;
case "1":
Console.WriteLine("您好1");
break;
case "2":
default:
Console.WriteLine("您好2");
break;
}
Console.ReadKey();
9.用户自定义异常类需要从以下哪个类继承?
Exception。
10.以下哪个类是int的基类?( B )
A.Int32 B.Object C.ValueType D.Int16
11.下列关于构造函数的描述正确的是(c)理解构造函数和函数重载的区别
a)构造函数可以声明返回类型。//构造函数连返回值都没有,如何声明返回类型?
b)构造函数不可以用private修饰
c)构造函数必须与类名相同 //这个是对的。
d)构造函数不能带参数 //没有参数和不能带参数是两回事
class A
{
public A()
{
Console.WriteLine("钩爪子");
}
}
★★★首先理解如何构造函数(构造函数和函数重载不是一回事,构造函数是名称和类名一样的特殊函数
而函数重载是几个相同函数名使用了一些规则后,可以同时存在)
构造函数是用来创建对象的特殊函数,函数名和类名一样,没有返回值,连void都不用
构造函数可以有参数,默认情况下是没有参数的构造函数,记住没有没有参数和不能有参数是两回事
12.以下关于ref和out的描述哪些项是正确的?(多选) ( ACD )
A.使用ref参数,传递到ref参数的参数必须最先初始化。●对●
★★//不论是int 还是 string 参数必须最先初始化
B.使用out参数,传递到out参数的参数必须最先初始化。●错●
★★
(1)传递到out参数的参数没有进行初始化
int i;
string s = Console.ReadLine();
if (int.TryParse(s,out i))
{
Console.WriteLine("您好");
}
else
{
Console.WriteLine("您真坏");
}
(2)传递到out参数的参数可以初始化
static void Main(string[] args)
{
int i = 70;
string name="刘一江"; //可以初始化
Int(i, out name);
Console.WriteLine("姓名{0},分数{1}", name, i);
Console.ReadKey();
}
static void Int(int j, out string name)
{
if (j < 100)
{
j = 20;
name = "张三";
}
else
{
j = 100;
name = "高尚";
}
}
C.使用ref参数,必须将参数作为ref参数显式传递到方法。
D.使用out参数,必须将参数作为out参数显式传递到方法。
12.Error和Exception有是区别?
error表示恢复不是不可能,但是很困难
exception表示一种实际或实现问题,它表示程序运行正常,产生不可以发生的情况。
13.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。return 是结束标记,会结束整个程序。
14.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。
long,string 都不能作用于swtich。
15.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为
s1 =(short)(s1 + 1)或者short s1 = 1; s1 += 1正确。
★★★与此相同情况的还有 float f =(float) 3.15;f = f + 1;
★★★long int double 则不用考虑这个问题。
16.C#可否对内存进行直接的操作?(这可是个难点哦?要注意!),如果能,如何操作;如果不能,为什么?
可以,用指针来对内存进行操作。
17. 分析以下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;//获取是内存中字节的长度。
int j= strTmp.Length; //获取的是字符串的长度
以上代码执行完后,i=13 j=10
18.Equals判断对象是否想等。
(1)如果不在指向同一存储地址的话,那么肯定不想等,如果指向同一内存地址的话,再进行判断。
Person p = new Person();
p.Name = "a";
Person p1 = p;
p1.Name = "A";
Person p2 = new Person();
p2.Name = "a";
Console.WriteLine("p,p1====>{0}", object.ReferenceEquals(p, p1));
Console.WriteLine("p1,p2====>{0}", object.ReferenceEquals(p1, p2));
Console.WriteLine("p,p2====>{0}", object.ReferenceEquals(p, p2));
Console.WriteLine("p,p2====>{0}", object.Equals(p, p2));
Console.WriteLine("p1,p====>{0}", object.Equals(p1, p));
Console.WriteLine("p1,p2====>{0}", object.Equals(p1, p2));
class Person
{
public string Name
{
get;
set;
}
}
(2)字符串进行判断的是两个对象的值,而不是对象。
// test t = new test();
t.Name = "a";
test t1 = new test();
t1.Name = "a";
t.Equals(t1);
class test
{
public string Name;
public override bool Equals(object obj)
{
return this.Name == ((test)obj).Name;
}
}
19. string与String的区别
string、int是C#定义的类型,而String、Int32是.net类型即是CTS类型; string 是 .NET 框架中 System.String 的别名。string在编译的时候会转化为String类
20. 是否可以继承String类?
String类是final类故不可以继承
21.数组有没有length()这个方法? String有没有length()这个方法?
没有,有这个属性。String有这个方法。
22. 一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。请用c#语言编写主要程序来实现。
//先用字符串数组列出a-z
string[] LetterList = new string[] { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
//声明一个可变字符串
StringBuilder sbRe = new StringBuilder();
//声明一个随机种子函数
Random rd = new Random();
for (int i = 0; i < 10000; i++)
{
//往可变字符串函数里追加(26个之内任意一个字符)
sbRe.Append(LetterList[rd.Next(26)]);
}
Console.Write(sbRe.ToString());
Console.ReadKey();