C# 问答

1.程序的结构由哪些部分组成?

答:程序结构最基本的部分有:

  1. 命名空间
  2. 定义 class
  3. 成员变量
  4. 成员函数(方法)

2.什么是标识符、什么是关键字?

答:标识符在编程语言中是用来给变量、函数、类、模块等编程元素命名的字符序列,用于识别代码中的不同部分。

关键字是编程语言中预定义的、具有特殊意义的保留词汇,它们用于控制程序的结构、定义数据类型、控制流等核心功能。每个编程语言都有自己的关键字集,这些集合是固定的,并且在整个语言的范围内都是预定义的。

3.什么是命名空间namespace?

答:为防止文件名一致,导致系统无法区分,增加命名空间前缀来区分不同命名空间下的文件。命名空间定义了一个作用域,允许你将相关的类、接口、结构、枚举等组织在一起,形成一个逻辑上的分组,这意味着在该命名空间内部定义的类型只在该命名空间内或引入该命名空间的范围内可见。这有助于控制类型和成员的访问范围,增强代码的安全性和封装性。

4.构造函数和析构函数的作用?

答:构造函数确保对象以正确状态开始其生命周期,在创建对象时被自动调用,用于为对象的成员变量赋予初始值或执行必要的设置。

析构函数负责在对象不再需要时妥善处理资源,通过自动执行清理工作,析构函数有助于确保程序的稳定性,避免因资源未被正确释放而导致的问题。

5.数据类型有什么作用?分什么整数、小数、对象干嘛,多麻烦?

答:通过规定数据的类型,如整数、小数、字符等,可以确保每个变量存储正确的数据,这有助于预防类型错误。明确数据类型可以让编译器或解释器准确地为每个变量分配合适的内存,避免浪费宝贵的资源。

6.值类型和引用类型的区别?

答:值类型:直接存储数据的实际值。小的值类型(如基本类型int、float等)往往直接存储在调用栈上,以提高访问速度。在编译时就能确定所需的空间大小,并在函数调用时分配在栈上,当函数退出或变量作用域结束时,值类型的实例会被自动清理。赋值操作会创建数据的副本,修改副本不会影响原值。

引用类型:存储的是指向数据实际存储位置(堆内存)的引用或指针。在程序运行时动态分配内存,由.NET的垃圾回收器(GC)管理内存的分配和回收,访问时需要通过引用间接获取实际数据,这可能涉及额外的内存访问,因此效率相对较低。赋值操作仅复制引用,因此改变一个引用类型变量的内容会影响到所有引用同一对象的其他变量。大小可变,能够表示复杂的数据结构和行为。

7.栈和堆的区别?

答:栈适合存储生命周期短、大小固定的值类型数据,主要存放值类型(如int、float、struct等)和引用类型的引用(而非引用类型的实际数据)。

堆则适合存储生命周期长、大小可变的引用类型数据,主要用于存储引用类型(如class实例)的实际数据。当声明一个引用类型变量时,变量本身存储在栈上,而实际的对象则存储在堆上。

8.Struct结构体和Object对象的区别?

答:Struct结构体是值类型。对于局部变量结构体存储在栈上, 如果是类的字段则在包含它的对象的内存区域中。通常更偏向于高效的小数据存储。

Object对象是引用类型。对象实例存储在堆上,而变量中存储的是对象的引用。当对象被赋值给另一个变量时,实际上是复制了引用,而不是对象本身,所以对对象的修改会影响所有引用该对象的变量。

9.什么是隐式类型转换,什么是显式类型转换?

答:隐式类型转换,有时也称为自动类型转换,是由编程语言的编译器或解释器自动执行的,无须程序员明确指示。隐式转换的主要目的是让代码更自然地编写,减少程序员的负担,同时确保数据类型的兼容性。

显式类型转换,又称强制类型转换,是程序员明确指示编译器将一个类型转换为另一个类型,这通常通过特定语法来完成。显式类型转换给予程序员更多的控制权,但也要求其对数据类型和可能的精度损失有清晰的理解。

10.可空类型是什么意思?有什么作用?

答:可空类型是一种特殊的值类型,它允许一个通常不允许为null的值类型能够表示null值

作用:可以处理来自数据库的数据或者在需要表示不确定或可选的值。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值