目录
1.什么是构造函数?
概念:构造函数的方法名与类型相同、没有返回类型
作用:完成对类的对象初始化
创建一个类的新对象时,系统会自动调用该构造函数初始化新对象, 如果没有写定义,那么系统会自动提供一个不带任何参数的public 构造函数
2.struct类型和Class类型的区别
结构体与类的区别在于,结构体是值类型,而类是引用类型。这意味着,
当使用结构体时,实际上是将整个结构体的副本复制到另一个位置,
而使用类时,实际上是将类的引用复制到另一个位置。
struct Point
{
public int X;
public int Y;
}
Point p1;
p1.X = 10;
p1.Y = 20;
Point p2 = p1; // 复制 p1 的值到 p2
1.class是引用类型,struct是值类型
2.class允许继承、被继承,struct不允许,只能继承接口
3.简述一下面向对象的三大特性?
封装、继承、多态。
封装:是通过把对象的属性的实现细节隐藏起来,仅对外提供公共的访问方法。
继承:是通过子类继承基类、继承抽象类、继承接口实现的。
多态:是通过重写基类的override 方法、重写虚方法实现的。
4.构造函数是否能被重写?
不能被重写
但是,在 C# 中,我们可以使用 base
关键字在子类的构造函数中调用父类的构造函数。
class BaseClass
{
public BaseClass(int x)
{
// ...
}
}
class DerivedClass : BaseClass
{
public DerivedClass(int x, int y) : base(x)
{
// ...
}
}
5.抽象类和接口有什么区别?
使用 abstract
关键字来定义抽象类和抽象方法,使用 interface
关键字来定义接口和接口方法
1、它们的派生类只能继承一个抽象但可以继承任意多个接口。
2、抽象类中可以定义成员的实现,但接口中只能定义,不可实现。
3、抽象类中可以包含字段、构造函数、析构函数、静态成员或常量等,接口中不可以。
4、抽象类中的成员可以是私有的(只要它们不是抽象的)、受保的、内部的或受保护的内部成员(受保护的内部成员只能在应用在程序的代码或派生类中访问),但接口中的成员默认是公共的,定义时不能加修饰符。
6.类的执行顺序?
- 父类和子类的定义会在类加载时被加载到内存中。
- 静态块和静态字段会在类加载时被初始化。
- 非静态块和非静态字段会在创建实例时被初始化。
- 构造函数会在创建实例时被调用。
7.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?
接口可以继承接口,
抽象类可以实现接口,
抽象类可以继承实现类
8.继承最大的好处?
对父类成员进行重用,增加代码的可读性、灵活性。
9.请说说引用和对象?
对象和引用时分不开的,对象生成一个地址,放在堆里面,引用则指向这个地址,放在栈里面
10.什么是匿名类,有什么好处?
不用定义、没有名字的类,使用一次便可丢弃。好处是简单、随意、临时的。
var anonymousClass = new { Name = "John", Age = 30 };
string name = anonymousClass.Name;
int age = anonymousClass.Age;
注意,匿名类的字段是只读的,因此我们不能对它们进行修改。
匿名类是一种非常方便的工具,我们可以使用它来临时定义类型并创建实例,而无需定义额外的类型。它通常用于简化类型转换或数据绑定等操作。