C#笔试面试知识点整理(吐血整理)

本文详细梳理了C#编程中的关键概念,包括接口、类与结构体的区别、默认修饰符、构造函数执行顺序、访问修饰符、页面传值方式、线程与进程的区别、重载与重写、虚方法与抽象方法、多态性、接口与抽象类的对比,以及堆和栈的内存管理。这些内容涵盖了C#笔试和面试的常见知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、接口
可以包含方法、属性、事件、索引器或这四种成员类型的任意组合。 接口不能包含常量、字段、运算符、实例构造函数、终结器或类型。 接口成员会自动成为公共成员,不能包含任何访问修饰符。 成员也不能是静态成员。若要实现接口成员,实现类的对应成员必须是公共、非静态,并且具有与接口成员相同的名称和签名。
接口既不能有构造函数(如何构建不能实例化的对象?)也不能有字段(因为这隐含了某些内部的实现方式)。
在接口定义中不允许声明成员的修饰符。接口成员总是隐示为public,不能修饰为virtual,如果需要就应该由实现的类来声明。
接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。

二、类和结构体的区别

1、结构与类的区别是他们在内存中的存储方式、访问方式(类是存储在堆(heap)上 的引用类型,而结构是存储在栈(stack)上的值类型)。 较小的数据类型使用结构可提高性能。 但在语法上,结构与类非常相似,主要的区别是使用关键字 Struct代替 Class来声明结构。
2、结构的一个限制是不支持继承,但每个结构都派生自System.ValueType.结构不能实现类型层级的结构,但结构可以实现接口。换言之,结构并不支持继承,但支持接口继承。而类可以派生自另一个类和任意多个接口。
事实上定义结构和类可以总结为:
结构总是派生自Sytem.ValueType,它们还可以派生自任意多个接口
类总是派生自用户选择的另一个类,它们还可以派生自任意多个接口
3、结构体派生自ValueType,ValueType派生自Object,可访问Object的方法
结构体的默认构造不能显示给出,不然编译器会报错,当类有自定义的构造函数时,默认构造会被隐藏,要想使用默认构造,必须显示给出;结构体的自定义构造函数必须初始化所有的实例字段和未初始化的属性,而类不必。结构体默认的构造函数是自动定义的,且不能被改变。
4、在结构体中可以声明字段,但是声明字段的时候是不能给初始值的。类中声明1个字段的同时给这个字段赋初始值,
5、创建结构体对象可以不使用new关键字.直接声明1个变量就可以.但是这样的话,结构体对象中的字段是没有初始值的,所以在使用字段之前必须要为这个字段赋值.
原因很简单.因为声明的时候就不能给初始值,虽然构造函数中为对象的字段赋值,但是此种方式创建结构体对象,没有调用构造函数,所以必须要程序员在使用之前手动赋值。
另外1种创建结构体对象的方式和类一样,使用new关键字来创建,与不使用new关键字创建不同的是,通过使用new关键字创建结构体对象后,这个结构体对象的字段就已经有值了.原因不难理解,new关键字调用了构造函数,而结构体构造函数要求必须要为所有的字段赋值.

三、C#默认的修饰符

1、直接声明在命名空间下的类和结构体,默认是internal的
2、类和结构体的成员,包括内嵌的类和结构体,默认是private的
3、接口默认是internal的
4、enum的成员是public的访问权限
5、类的成员,默认是private的访问权限
6、接口的成员,默认是public的访问权限
7、结构体的成员,和class类似,默认的访问权限也是private的
*

四、基类和子类构造函数的执行顺序*

1、当实例化一个子类时,父类以及子类的变量和构造函数的执行顺序如下:
01子类的静态变量->02子类的静态构造函数->03子类的变量->04父类的静态变量(此时因为要执行子类的构造函数,会与父类发生关系)->05父类静态构造函数->06父类变量->07父类构造函数->10子类构造函数->结束。

 class A
 {
      public A()
      {
          PrintFields();
      }
      public virtual void PrintFields() { }
  }
  class B : A
  {
      int x = 1;
      int y;
      public B() { y = -1; }
      public override void PrintFields()
      { Console.WriteLine("x={0},y={1}", x, y); }

  }

new B()输出结果为 x=1,y=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值