c#基础介绍

c#基础



1. 什么是抽象类,和接口有什么区别

在 C# 中,抽象类是指无法实例化的类,其目的是为了供其他派生类型继承和实现。抽象类可以包含抽象方法、虚方法和非虚方法,而且子类必须要实现父类中所有的抽象方法,否则子类也必须声明为抽象类。

相对地,接口是一种特殊的抽象类,它只包含方法、属性、事件和索引器等成员的签名,没有任何实现代码。实现接口的类需要提供实现这些成员的具体方法代码。一个类可以实现多个接口,这样它就可以获得接口中定义的所有成员的实现代码。

从使用方式上来说,抽象类在设计时考虑到了共性,由于其本身并不拥有实际的对象,所以无法被实例化。而接口则更加注重行为,定义了一组规则,让不同的对象能够拥有共同的行为,方便开发者进行程序设计。

2. 什么是多态

多态是面向对象编程中的一个重要概念,指同一个方法或操作可以在不同的对象上产生不同的行为。简单来说,就是同一个方法在不同的对象上调用时,会有不同的表现或结果。

多态性需要基于继承和接口实现。在 C# 中,通过继承关系可以实现运行时多态,即通过基类引用一个派生类对象,并进行函数调用,可以根据具体对象类型调用其相应的函数实现。

例如,假设有一个基类 Animal,它有一个虚拟成员函数 Speak(),再有两个派生类 Dog 和 Cat,它们重写了 Speak() 函数,在 Main() 中,我们可以定义一个 Animal 类型的变量 animal,然后将其指向一个具体的 Dog 或 Cat 对象。这样,在调用 animal 的 Speak() 函数时,实际调用的就是具体对象的 Speak() 函数,从而产生不同的行为。

另外,C# 还通过接口实现编译时多态,即不同的类可以实现同一个接口,从而使用相同的接口定义出来的方法,这样就可以通过接口的相关操作实现多态行为。

3. 数据库索引知道吗,简单说一下

数据库索引是一种用于加快对数据库表中数据检索和操作的数据结构,它可以类比字典里的索引,让我们更方便地查找到需要的信息。

数据库中的索引通常会依照某个列或者列的组合建立一个二叉树、B+树等数据结构,这些数据结构允许快速定位数据。当我们在查询这个表中的数据时,如果有使用索引,数据库就会优先通过索引来查找符合条件的记录,而不是逐行扫描整个表,从而大大提高查询效率。

除了查询,数据库索引也可以加快 INSERT、UPDATE 和 DELETE 操作的速度。因为这些操作都会影响到表中的索引,所以数据库在进行相关操作时也需要维护相应的索引结构。

当然,索引不是越多越好,因为每个索引都需要占用存储空间,并且在对表进行修改操作时,还需要更新所有相关联的索引,所以过多的索引会影响进行 INSERT、UPDATE 和DELETE操作的性能,并会浪费计算机资源,增加数据库复杂性。因此,在设计和使用索引时需慎重考虑,避免滥用。

4. array和arraylist的优缺点和他俩的区别

数组(Array):

优点: 因为所有元素类型相同,所以访问速度快,内存利用率高。
缺点: 大小不可修改,需要预先确定长度,且直接存储在连续的内存位上,插入和删除操作效率低。

数组列表(ArrayList):

优点: 长度可随时增减,而且提供了许多方便的方法,如Add、Remove等,灵活性较好。
缺点: 内存消耗比较大,因为其元素类型可以不同,所以每个元素需要一个额外的类型指针和垃圾回收标记。
两者的主要区别在于Array是固定大小的,一旦声明后就无法改变大小,ArrayList则是可动态调整大小的。同时,Array只能存储相同类型的数据,而ArrayList可以存储不同类型的数据。此外,受限于存储方式不同,二者在各种操作的效率也有差异。

对于只需要存储同类型数据,长度固定并且需要最好的性能的情况下,使用Array更合适;而对于长度不确定或需要存储不同类型数据的情况,则使用ArrayList更加灵活方便。

需要注意的是,由于存在装箱和拆箱的问题,ArrayList的效率较低。因此在.NET Framework 2.0之后,Microsoft发布了泛型集合,如List、Dictionary<TKey, TValue>等,以替代原有的非泛型集合类,这些泛型集合提供了更好的性能和类型安全性。

回到顶部


猜你喜欢

转载自blog.csdn.net/weixin_47410172/article/details/130579278