.NET编程语言基础题1

1/值类型和引用类型的区别

答:值类型变量直接包含数据,并存储在内存的堆栈中;引用类型的变量只存储对数据内存地址的引用,数据则存储在托管堆中,引用类型变量的值被修改将影响另一个引用类型变量

2/枚举类型的应用

答:可用于更方便地存储一组整数值,并且为每个整数值定义容易记忆的项目名称。

3/简述结构和类的区别

答:1.结构类型是值类型的数据封装体,不支持继承,所有结构都直接继承System.ValueType类,结构可以实现接口。

2.结构类型无法声明无参数的构造函数,可以声明带参数的构造函数,其使用方法和类一致。

3.结构的静态字段可以直接赋予初始值,而实例成员则不允许。不过可以在带参数构造函数中对实例成员进行一次性初始化操作。

4.结构是值类型,初始化可以不使用new运算符。结构的new操作不执行分配内存操作,只执行初始化数据操作。

4/说明C#函数的参数修饰符的作用

答:out修饰符表示按引用传递参数,但函数必须将其赋值。

params修饰符表示行参可以为不确定个数的一组实参,这组实参必须具有相同数据类型。

ref表示按引用传递参数,传递前需要赋初始值。

无参数修饰符,表示参数传递方式为按值传递

5/简述C#变量的隐式类型声明

答:var关键字用于隐式声明局部变量的数据类型,由编译器根据初始值推测具体的数据类型。var声明的变量为局部变量。

6/如何使用C#的可空类型

答:适应变量需要存储值类型或null值的情况,在对应的值类型加上?后缀即可声明变量的数据类型。?后缀不允许应用于引用类型,但可以应用于值类型数组。

int? result = getrs()??0;实现空值处理办法

当getrs()方法返回null值时,result变量将被赋值为0

7/用什么方法操作字符串更高效

答:string类型的变量所存储的字符串对象创建后无法修改,只能通过复制一个副本操作,所以字符串操作效率不高。System.Text.StringBuilder类,该类拥有大量字符串操作方法,其对象可以高效操作字符串。

8/如何使用C#的扩展方法

答:可以用于扩展指定类型的功能,而不需要修改类型内部的代码,并且方法可以单独定义在外部程序集。

9/栈和堆是什么意思

答:栈指堆栈,可用于存储非对象的值类型数据,以及引用类型实例的地址引用。

堆指托管堆,可用于存储由new创建的引用类型实例,引用类型变量可存储实例的地址引用,以达到访问实例的目的。

数据的清除:堆栈的值类型数据在超出作用域时将被清除。托管堆中的实例只有在没有被任何变量引用时,才可能在未来某个时间被清除,交给垃圾收集器GC完成

10/.NET如何处理异常

答:try-catch-finally结构,并包含大量继承与Sysyem.Exeception类的异常类。

11/如何使用多个carch处理异常

答:try{}

文件未找到异常

catch(FileNotFoundException e){Console.WeriteLine(“异常信息:{0}”,e.Message);}

字符串格式异常

catch(FormatException e){Console.WeriteLine(“异常信息:{0}”,e.Message);}

一般异常

catch(Exception e){Console.WeriteLine(“异常信息:{0}”,e.Message);}

finally{Console.WeriteLine("执行清理代码");}

12/如何自定义异常

处理自定义异常

catch(HiPriceException e)

{

Console.WriteLine("异常信息:{0}",e.Message);

Console.WriteLine(e.Data["time"]);

Console.WriteLine("获取更多帮助信息:{0}",e.HelpLink);

}

创建自定义异常类的对象e

HiPriceException e=new HiPriceException("");

e.Data.Add("time",String.Format("异常发生时间:{0}",DateTime.Now));

e.HelpLink="http";

throw e;

自定义异常类,并继承SystemException

class HiPriceException:ApplicationException

{

默认构造函数

internal HiPriceException(){}

重载构造函数,继承基类方法

internal HiPriceException(string m):base(m){}

}

13/简述面向对象的程序设计思想

答:面向对象是程序开发的一种机制,其特征为封装、继承、多态及抽象。编写程序时,需要将复杂的项目抽象为多个对象互相协作的模型,然后编写类型的结构,声明或实现类型的成员,在项目中编写不同的类型完成不同的功能,最后在程序中通过类的实例处理实际问题

14/描述类和对象的区别

答:类指一类实物,类定义了对象的相关数据和方法,类通过构造函数生成对象;对象指属于这一类事物的实体,对象实现了类的定义。

类是用于描述对象的特征、状态和行为的模板,

对象指拥有具体特征、状态和行为的实体。

15/描述private,protected,internal,public修饰符的作用

答:private访问权限仅为所属类的内部,

protected访问权限仅为所属类及子类的内部,

internal访问权限为同一程序集内部,

public公共访问权限,访问没有任何限制,滥用将影响类的封装性,带来安全隐患

protect internal可在子类中或同一程序集内被访问

16/描述sealed修饰符的使用

答:sealed属于密封类,无法被继承,无法被所属类的子类继续重写

sealed修饰实例方法或属性时,必须和override一起使用,

class phone:product

{

internal sealed override void display()

{

console.writeline();

}

}

17/简述静态类和静态类成员

答:static所修饰的类或类成员被称为静态类或静态成员,静态成员在访问时直接引用类名非对象名,this无法访问静态成员。声明静态类时,必须保证内含成员全部为静态成员

18/构造函数的作用

答:构造函数用于创建类的实例,并对类进行初始化操作,通过不同的参数传递,可进行不同的实例初始化操作

19/方法的重载和override有什么区别?

答:重载是方法的名称相同,参数不同,返回类型也可以不同,进行多次重载以适应不同的需要;重写是进行基类中函数的扩展或改写,参数必须与被重写函数保持一致,只有继承的虚方法或抽象方法可以被重写,静态方法不能被重写。

20/接口和抽象类的区别

答:1.抽象类只能派生类,接口可派生类和结构;

2.抽象类的派生类也可以是抽象类,抽象成员在派生类中不一定被完全实现。接口要求其派生类或结构必须完全实现其成员;

3.抽象类可以包含已经实现的成员,可以包含字段。接口只包含未实现的成员,不能包含字段。接口及所含有成员必须为public访问级别;

4.类只能继承一个抽象类,可以继承或实现多个接口

21/访问关键字this和base有什么作用

答:this用于引用类的当前实例,静态成员中不能使用;base用于访问基类成员,基类被重写的虚方法只能通过base访问

22/.net程序是如何编译的

答:被各自的编译器编译为一致的中间语言,最后由CLR提供运行环境。将中间语言编译为机器码,供CPU执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值