C#的第一次作业

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

一个c#的程序结构由命名空间、类、方法、标识符、构造函数等

1.1命名空间

用于组织和管理代码,避免命名冲突 

1.2类

一种数据结构,存储数据成员、方法成员和其他类等内容,方便调用。

1.3方法

一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块

1.4标识符

标识符包括:类名、变量名、方法名、数组名...

1.5构造函数

构造函数在对象创建时初始化对象的状态。每个类可以有一个或多个构造函数,用于不同的初始化需求

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

2.1标识符

标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字
标识符中的第一个字符不能是数字。
标识符必须不包含任何嵌入的空格或符号
标识符不能是 C# 关键字有 @ 前缀的除外
标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
不能与C#的类库名称相同。

2.2关键字

关键字是C#语言中预定义的具有特殊含义和用途的单词。这些关键字被编译器用于识别语法结构和功能,因此不能用作标识符命名。关键字必须完全按照其规定的用法和拼写使用。

3. 什么是命名空间(namespace)?

命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

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

4.1构造函数

类的构造函数是类的一个特殊的成员函数,默认的构造函数是没有任何参数的,可以重新设置无参数的构造函数,也可以为构造函数设置参数,构造函数的名称必须跟类名一样。

4.2析构函数

析构函数在对象生命周期结束时被调用,通常用于执行清理工作

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

数据类型作用:控制数据操作,确保数据准确性。

这是因为不同的数据类型适用于不同的场景和需求。整数类型适用于存储没有小数部分的数值,小数类型适用于存储有小数部分的数值,而对象类型则允许我们创建自定义的数据结构和行为。虽然这可能会增加一些复杂性,但它也为我们提供了更大的灵活性

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

值类型存储其数据的实际值,变量直接包含数据。

引用类型存储的是对象的引用地址,变量存储指向对象的指针

以下是它们之间的主要区别

值类型:对于栈上的值类型变量,其生命周期通常与包含它的作用域(如方法或代码块)相同。一旦作用域结束,变量就会被销毁,其占用的内存也会被自动释放。对于作为对象一部分的值类型字段,其生命周期与包含它的对象相同。

引用类型:由于引用类型的数据存储在堆上,其生命周期不受作用域的限制。当没有任何引用指向一个对象时,该对象就成为垃圾回收的目标,其占用的内存会在适当的时候被释放。

7. 栈和堆的区别?

栈:栈通常用于存储值类型数据。栈中的数据大小固定,且遵循先进后出(的原则。栈中的数据是按照一定的顺序排列的,便于快速访问。栈内存中的数据随着方法的开始而分配,随着方法的结束而自动释放。这种自动管理的方式使得栈内存的使用非常安全,但也限制了其使用场景。

堆:堆则主要用于存储引用类型数据堆内存通常比栈内存大得多,且存储的数据没有固定的顺序。堆上的对象通过引用来访问。堆内存中的数据生命周期则完全由程序员控制。程序员需要显式地分配堆内存,并在不再需要时显式地释放或等待垃圾回收器回收。这种灵活性使得堆内存可以用于存储生命周期较长的数据,但同时也增加了内存泄漏的风险

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

Struct结构体和Object对象的主要区别在于它们的类型与存储、赋值与修改、构造函数与析构函数、初始化与赋值、继承与多态、内存管理与性能以及用途与场景等方面

Struct(结构体):由于结构体是值类型,它们在栈上分配内存,因此创建和销毁它们的成本相对较低。但是,由于结构体在赋值时会创建副本,这可能会导致性能问题,特别是当结构体很大时。

Object(对象):对象在堆上分配内存,创建和销毁的成本相对较高。但是,由于对象是通过引用来访问的,因此可以避免在赋值时创建数据副本的问题。

Struct(结构体):结构体是值类型,它存储在栈上或作为对象的一部分存储在堆上。结构体直接包含其数据的值,而不是指向数据的引用。

Object(对象):对象是引用类型,存储在堆上。对象变量实际上保存的是对堆上数据的引用,而不是实际的数据。

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

隐式类型转换:隐式类型转换是编译器自动进行的类型转换,不需要程序员在代码中显式指定。这种转换通常发生在将一个较小范围的数据类型转换为较大范围的数据类型时,且这种转换是安全的,不会导致数据丢失。自动、安全、无需显式指定,适用于从较小范围到较大范围的转换。

显式类型转换:显式类型转换需要程序员在代码中明确指定,通常使用类型转换运算符进行。这种转换发生在将一个较大范围的数据类型转换为较小范围的数据类型时,或者将一种类型的对象转换为另一种类型的对象时。显式转换可能会导致数据丢失或精度降低。需要显式指定、可能导致数据丢失或精度降低,适用于从较大范围到较小范围的转换或不同类型对象之间的转换。

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

10.1可空类型

可空类型是指一种特殊的数据类型,它允许一个值类型的变量除了可以表示该值类型的正常取值范围外,还可以表示null值。在C#中,默认情况下,值类型是不允许为null的,因为它们总是存储具体的值。然而,在某些情况下,我们可能需要表示一个值类型的变量当前没有有效的值,这时就可以使用可空类型。

10.2可空类型的作用

  1. 方便表示缺失值
    • 在业务逻辑中,某些值可能是可选的或未知的。使用可空类型可以清晰地表示这种情况,避免使用特殊值来表示缺失值,从而减少误解和错误。
  2. 处理数据库中的Null值
    • 当从数据库中读取数据时,经常会遇到Null值。使用可空类型可以安全地将这些Null值映射到C#变量中,避免在后续操作中引发空指针异常。
  3. 与值类型的默认值区分开
    • 可空类型可以明确表示一个变量是否已经被赋值,而不与值类型的默认值混淆。例如,int类型的默认值是0,但如果一个int?类型的变量为null,则明确表示该变量尚未被赋予任何有效的整数值。
  • 23
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值