c#面试知识点整理(一)

本文涵盖C#语言的关键概念,包括语法特性、异常处理、访问修饰符等,并解析常见面试题,帮助开发者深入理解C#。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面试知识点整理(一)

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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值