C#的学习基础篇(1)

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

C# 程序由一个或多个文件组成。 每个文件均包含零个或多个命名空间。 一个命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间,这张图是一个基本的程序结构:

其中对一些关键词的解释:

1.命名空间namespace name:

它相当于一个工具包,在C#中用于组织类的逻辑容器,很好的避免类名冲突,通过使用 . 运算符分隔它们,using 指令可免去为每个类指定命名空间的名称。

2.类class 

类是C#中的基本构建块,用于定义对象的数据和行为。一个类可以包含字段、属性、方法和事件等成员。

3.主函数Main

这是C#程序的入口点。static关键字表示Main方法属于类本身,而不是类的实例,当程序运行时,它会自动调用Main方法,Main方法通常用于初始化程序、执行主要逻辑和结束程序。

2.  什么是标识符、什么是关键字?
  1. 标识符:首先它只能由英文字母(A~Z、a~z)、数字(0~9)和下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线,同时可以同@字符来使用与关键字相同的名称,如@if@class;标识符不能以数字开头也不能包含空格;其中C#对大小写很敏感,所以要区分大小写;遵循一些命名约定,如驼峰命名法和帕斯卡命名法。
  2. 关键字:关键字是C#语言中预定义的保留字,它们对编译器有特殊的意义,用于构成语言的语法和结构,关键字不能用作标识符,class,struct,enum,using,namespace等,这里就不一一写出来了
3.什么是命名空间namespace?
  1. 关于什么时命名空间,在问题1中就解释的差不多了,这里在做些补充,命名空间(namespace)是C#和其他一些编程语言中用于组织和封装代码的机制,它的主要目的是帮助避免名称冲突,尤其是在大型项目或使用多个库的情况下,命名空间可以看作是一个逻辑上的容器,用于分类和分组相关的类型(如类、结构、枚举等等),命名空间是C#中一个重要的特性,它不仅帮助管理代码的结构,还提高了代码的可读性和可维护性。
  2. 命名空间具有以下属性:它们组织大型代码项目;通过使用 . 运算符分隔它们;using 指令可免去为每个类指定命名空间的名称。
     
4.        构造函数和析构函数的作用?

构造函数:它是在创建对象时自动调用的,它的主要目的是初始化对象的状态。在C#中,构造函数的名称必须与类名完全相同,它没有返回类型,甚至不包括void。构造函数可以有参数,这允许你在创建对象时传递初始值。

析构函数:析构函数在对象生命周期结束时被调用,通常用于执行清理工作,如释放非托管资源等。声明语法:

~Rectangle{ … 

}

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

作用:定义了变量能存储的信息种类及其在内存中的表示方式,还直接关系到程序的性能、安全性及可维护性。通过合理选择数据类型,可以有效管理内存资源,确保数据的准确性和运算的精确度,同时利用类型安全机制预防运行时错误;不同类型的数据支持不同的运算和操作,让开发者根据具体需求灵活选择,达到优化应用程序的执行效率,面向对象编程中,数据类型更是实现封装、继承和多态的关键,为构建复杂逻辑和设计模式提供了坚实的基础。

为什么区分:因为满足了不同应用场景的需求,如游戏开发和财务软件对数值精度的不同要求;同时,精准匹配数据类型,可以显著提升程序的效率;明确的数据类型增强了代码的可读性和可维护性,利于团队协作和维护。

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

简单来讲我们使用上的区别就是值类型在相互赋值时,把内容拷贝给了对方,他变我不变,而在引用类型中则在相互赋值时,让两者指向了同一值,它变我也变。

具体的解释区别的话:

值类型存储位置直接存储在调用者的栈帧中或直接嵌入到对象中,对于较大的值类型,如果直接存储在栈上可能导致栈溢出,则可能会存储在堆上,这种情况下的值类型被称为“大值类型”;在复制行为上,当值类型被赋值或传递给函数时,会进行按值复制,这意味着每次赋值或传递时,都会创建一个新的副本;在内存管理中,值类型的生命周期与包含它们的变量或数据结构的生命周期紧密相关。当变量超出作用域或对象被销毁时,值类型也会随之消失,无需显式释放。

引用类型存储位置一般是实例存储在堆上,而栈上只存储指向堆中数据的引用,这意味着,栈上只存储一个指向实际数据的地址;引用类型被赋值或传递给函数时,传递的是引用而不是值,这意味着,多个变量可以引用同一个对象,对其中一个变量的修改会影响到所有引用该对象的变量;在内存管理上,引用类型的生命周期不是由变量的作用域决定的,而是由垃圾回收器(GC)管理。当一个对象不再被任何引用所引用时,它将成为垃圾回收的目标,其占用的内存将在适当的时机被回收。

7.        栈和堆的区别?

栈,数据只能从栈的顶端插入和删除,把数据放入栈顶称为入栈,从栈顶删除数据称为出栈。其中,栈内存无需我们管理,也不受GC管理。当栈顶元素使用完毕,立马释放。

堆, 堆是一块内存区域,与栈不同,堆里的内存能够以任意顺序存入和移除,堆要 GC(Garbage collection:垃圾收集器)清理。

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

在C#中,struct(结构体)和object(对象)代表了两种不同的数据类型,它们之间有一些显著的区别。struct是一种值类型,直接存储数据于栈上,快速且独立,适合小规模且频繁使用的数据,如数学坐标。它不支持继承和多态,生命周期与作用域绑定,而object是一种引用类型,同时也是所有其他引用类型的基础类,实例存在于堆上,通过引用访问,利于资源共享和大型对象管理,支持多态和复杂类型构建,适用于复杂数据结构和需要动态管理的对象

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

隐式类型转换:基本的规则,大范围装小范围,系统可以进行自动不同类型之间的转换,通常发生在两种数据类型进行运算、赋值或传递给函数时,其中一种类型会被自动转换为另一种类型,这种转换通常是安全的,不会导致数据丢失。

显示类型转换:显式类型转换也称为强制类型转换,是程序员明确要求执行的类型转换,显式转换可以用来将一个数据类型转换为另一个数据类型,即使这可能导致数据精度的损失或溢出。

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

C# 提供了一个特殊的数据类型,可空类型可以表示其基础值类型正常范围内的值,再加上一个 null 值,可空类型是通过在值类型的名称后面加上一个问号?来声明的。
作用:在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型,比如表示缺失值,在一些业务逻辑中,某些值可能是可选的,那么可空类型可以表示这种情况,避免使用特殊值来表示缺失;对于数据库中的null值,当从数据库中读取数据时,遇到null值时,可空类型可以用于安全处理,避免出现空指针异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值