c#部分知识点问答

编程基础部分

1.C#程序的组成部分

1)using+其他的命名空间:(当前没有,调用其他的)
2)namespeace+命名空间:(类的家)
3)类:(程序的基本单元,方法的家)
4)Main方法:(程序开始执行的地方)
5)代码:
语句,指令,命令
执行的次序为:从上到下,从左到右

2.解释何为命名空间及using的作用

using:导入其他命名空间
当前我没有,需要借用别人的
命名空间:类(class)的家

3.编程有什么规范

1.命名空间、类、方法用Pascal命名法
2.局部变量使用Camel命名法
3.区分字母大小写
4.指令语句都必须用一个;作为结尾
5.建议一个指令语句写成独立一行
6.{}标识了*范围,表示代码的区块
7.程序用的标点必须全为西文字符
8.适当缩进会让外观更好看,层次感更强

4.数据类型的分类

1.基本类型:
整型,浮点型,字符型,布尔型
2.引用类型:
数组,类,接口,委托

5.数据类型之间的互转(若知道面向对象 需要带入父子类、接口和实现类之间的转换)

6.表达式

由变量、常量、运算符、方法调用、类型转换等建立的复杂的式子

7.运算符

根据操作数的不同,分为一元、二元、三元操作符

8.程序的三大结构

顺序结构、选择(分支)结构、循环结构

9.控制语句 语法格式及使用时机

If-else: 范围对比
Switch: 等值对比
While : 先判断后循环
do-while: 先循环后判断
for: 已知次数的循环

10.数组的概念及声明及使用方式

概念:一个存储相同类型元素的固定大小的顺序集合,连续的内存位置组成
声名:数据类型[]数组名
使用方式:使用索引器访问指定编号位置的元素

11.方法的概念

广义:为获得某种东西或达到某种目的而采取的手段与行为方式
狭义:方法是指由一系列的程序语句组成的代码块

12.方法的声明格式

[访问修饰符][修饰符]<返回值类型 void><方法名>([参数列表]){}

13.方法的返回值

任意的数据类型或者void(void表示该方法无返回值)
方法有无返回值取决于方法的调用者是否需要返回值

14.方法的参数

形式参数:在编写方法的时候,预定义的参数
实际参数:在实际调用(使用)方法的时候,传入方法的参数

15.方法的传参规则

参数传递的方式:形式参数 = 实际参数

16.引用类型和值类型的区别

值类型: 基本数据类型, 枚举 和 结构
引用类型: 数组, 类, 接口, 委托

简述:

1.存储位置不同 2.查询效率不同 3.内存释
2.【释】简述值类型和引用类型有什么区别
1.值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的
是堆中存放的地址。
2.值类型存取快,引用类型存取慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
4.栈的内存是自动释放的,堆内存是.NET 中会由 GC 来自动释放。
5.值类型继承自 System.ValueType,引用类型继承自 System.Object。

详解:

c#部分知识点问答
值传递
基本数据类型赋值都属于值传递,值传递传递的是实实在在的变量值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。(值类型就是传递实际的值,他传给形参(方法内的参数,方法里重新赋值)形参变了只是形参的值改变了不影响实参)
引用传递
引用类型之间赋值属于引用传递。引用传递传递的是对象的引用地址,也就是它的本身(自己最通俗的理解)。引用传递:传的是地址,就是将实参的地址传递给形参,形参改变了,实参当然被改变了,因为他们指向相同的地址。(引用类型的值只是指向某一地址,方法传递也是传的地址,改变值也是改变该地址的值,地址不会变,但是地址的值变了所以指向该地址的引用类型的值就变了)
引用和我们的指针差不多,但是它不又不需要我们去具体的操作。

17.ref\out的作用及区别

out和ref传递的都是地址引用而不是值
1.形参和实参指向同一地址
2.始终保证形参和实参指向同一地址
区别:
out只出不进(传之前可以不赋值)
ref又进又出(必须先赋值)

面向对象部分:

1.类内部的内容有哪些:例如:成员变量等

成员变量,类变量,成员方法,类方法,成员属性,类属性,析构和构造

2. 类中内容的作用 例如:成员变量是每个对象都具备的 可以标识对象状态

3.类中内容的用法 例如:成员变量:使用对象引用.成员变量

4.对象的声明周期:对象出生->使用->消失详细说明 若其中有构造,请对构造详细说明

5.对象和对象引用的关系

对象: 类的实体,存储在堆中
对象引用: 桟中的数据,负责管理堆中的对象的地址

6.this的用法

成员方法中的隐参,是方法所在类的一个引用变量
每个成员方法自带,无需声明
作用:
1.方法被调用是立即执行调用该方法的对象
2.区分同名的局部变量和成员变量
3.调用本类的其他的构造方法,拷贝构造中使用较多

7.封装的含义及好处

含义:将字段(数据成员)和行为(代码成员)相机和的一种机制
好处: 1)使用方便(增强使用的便捷性)
2)加强内部数据的安全性

8.封装的步骤

9.封装最常用的方法

10.继承的概念

用已有的类创建新类

11.继承的好处

1)增强代码的复用
2)方便维护项目

12.继承的原则

子类继承父类私有以外的成员变量
子类继承父类私有以外的成员方法
子类不继承父类的构造方法
子类继承父类的析构方法
子类不能删除父类的成员
子类可以重定义(隐藏\覆盖)父类成员
子类可以增加自己独有的成员
子类可以访问父类私有成员(private)以外的内容

13.向上转型

1)父引用接收子对象
2)优点:(1)便于管理层级对象.(2)便于扩展项目

14.is/as的用法

Is:
检查对象引用是否为某个类型或其父类型
返回true或false
适配所有的类型
As:
尝试转换对象引用为具体类型的引用
返回对象引用或null
仅适配引用类型

15.多态的概念和表现形式

概念:同功能不同实现的版本
表现形式: 重载(overlord) 和 重写(override)

16.重载和重写的区别

区别: a)在同一个类中 父子类中
b)用方法参数区分 用关键字区分
c)相同对象以不同参数调用 不同对象以相同参数调用
d)编译期间的多态 运行期间的多态

17.static的作用:从变量 方法 类 构造的角度上解释

18.abstract关键字的作用

用abstract关键字来修饰的类
用abstract来修饰的方法

1.抽象类中不一定包含抽象方法
2.有抽象方法的类必定是抽象类
3.抽象方法只是声明,没有方法的实现
4.构造方法、类方法不能声明为抽象方法
5.子类必须实现抽象方法,除非子类也是抽象类
6.抽象类中不一定全是抽象方法 可以有一部分具体实现

19.sealed关键字的作用

被sealed修饰的类被称为密封类 密封类不能被继承
被sealed修饰的方法被称为密封方法 必须始终与override一起使用
被sealed修饰的属性被称为密封属性 必须始终与override一起使用

20.结构体(只是各种类型的结构组成)与类的不同点总结:

1、结构体是值类型,存储在栈上,类是引用类型,存储在托管堆上,结构体在声明的时候就已经为其分配栈上的内存了,而类需要用 new为其分配堆上面的内存;
2、结构体是隐式密封的,不能用 sealed 和 abstract 修饰,结构体不能被继承,类可以被继承;
3、结构体中的实例字段只能声明,不能赋值,而类没有限制,结构体只声明没有用 new 进行初始化时,可以给他的实例字段赋值,而类不行;
4、结构体没有析构函数,结构体中的方法不能用 virtual 和 abstract 修饰,但是可以用 override 修饰,用来重写父类的方法;
5、结构体不能显示给出默认构造函数(无参数的构造),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义构造函数时,默认构造会被隐藏,要想调用默认构造,必须显示给出默认构造。
6、结构体的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制
结构和类之间有什么区别?

1.结构是值类型,类是引用类型.
2.结构不能有构造函数和析构函数.
3.类可以同时有构造函数和析构函数
4.结构不支持继承,而类支持继承。

21.接口的概念

一组只有成员方法声明没有方法体的方法集。
接口中可写的内容:方法、属性、索引器、事件
类似于类的定义格式,只是以 interface作为定义符。
格式:[访问修饰符] interface 接口名

22.接口回调的概念

接口引用接收实现类对象

23.接口回调的好处

1)便于扩展和维护
2)便于协作
3)便于接口层级下的实例
4)调用显示实现的方法

24.接口和抽象类的区别

1)接口不是类
2)接口无法实例化 抽象类间接实例化
3)接口完全抽象 抽象类部分抽象
4)接口多继承 抽象类单继承

进阶及高级部分:

1.异常的概念及常用机制

异常实际上是程序中错误导致中断了正常的指令流的一种事件.

2.String的特征及常用方法

不可变性
遍历,截取,分割,替换,查询等;

3.枚举的概念及用法 详细

1.可以被穷举的结构,有限个数,即有限、可数的数据元素组成的集合
2.使用enum关键字来声明,与类同级
在C#语言中,枚举不能作为一个整体被引用,只能使用“枚举类型名.枚举成员名”的方式访问枚举中的个别成员。枚举成员本质上是一个常量,因而不允许向其赋值,只能被读取,而且应该通过强制类型转换才能将其转换为基本类型的数据。

4.结构的概念及用法 详细

1)结构是由多个不同数据类型的相关元素组合在一起而形成的一种数据结 构。
2)程序中只能以“结构名.结构成员名”的形式访问结构中的成员,可以对 其执行读写操作。

5.数据结构的分类

线性数据结构和非线性数据结构。
线性数据结构有:
线性表、栈、队列、串、数组和文件;
非线性数据结构有:
散列表、树和图。

6.常用的数据结构

A.数组:存放一组相同类型的数据,需先指定长度
B.链表
C.栈
D.队列(queue)只能在队尾(Rear)插入,队头(Front)删除
E.线性表
a.顺序表
b.链表

7.各数据结构的优缺点及使用心得

8.排序算法需要说明下其优缺点

冒泡排序运行起来非常慢,但在概念上排序算法中最简单的,在刚开始研究排序时也是一种很好的排序算法
选择排序改进了冒泡排序,冒泡是比较完就交换,而选择排序则是选出最小的才交换
插入排序是简单排序里最好的一种,但是稍微麻烦一些

9.排序算法的适用性

10.折半的概念及好处

11.递归的思想

思想:
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调 用函数(或过程)来表示问题的解。在C语言中的运行堆栈为他的存在 提供了很好的支持,过程一般是通过函数或子过程来实现。
递归算法:
在函数或子过程的内部,直接或者间接地调用自己的算法。

12.IO的理解及想法

I就是input输入,O就是output输出

13.IO中常见的类

FileInfo与File类:

  1. File提供用于创建、复制、删除、移动和打开文件的静态方法,
    并协助创建 FileStream。
  2. FileInfo 类提供实例方法。
    DirectoryInfo与Directory类:
    1)Directory 静态类提供通过目录和子目录进行创建,移动和删除等静态 方法。
    2)DirectoryInfo 提供通过目录和子目录进行创建、移动和删除等实例方 法。
    Path类:Path静态类的成员使您可以快速方便地对文件或目录路径信息String实例,执行常见静态操作方法。
    DriveInfo类:提供访问有关驱动器的信息的实例方法。

14.委托的概念及用法

委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

可以使用+=运算符,为委托新增方法。
同样可以使用-=运算符,为委托移除方法

委托类型的声明
以delegate关键字开头。
返回类型+委托类型名+参数列表

15.事件的概念及用法

事件是特殊的委托,事件基于委托,他为委托提供了封装性,一方面允许从类的外部增加,删除绑定方法,另一方面又不允许从类的外部来触发委托所绑定了方法。

16.Lambda的概念及用法

匿名方法,把一段代码直接绑定给事件,lambda就是更简单的编写匿名方法,彻底简化委托的使用.
=>

17.什么是反射

动态获取程序集的信息