C#面试题:面向对象一

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;

注意,匿名类的字段是只读的,因此我们不能对它们进行修改。

匿名类是一种非常方便的工具,我们可以使用它来临时定义类型并创建实例,而无需定义额外的类型。它通常用于简化类型转换或数据绑定等操作。

此条目发表在C#面试题:面向对象, 面试题分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注