记得2024年4月24日,我去了成都一家招C#程序员的公司进行面试。在这里整理一下这几个问题,并写出回答。其实我在一些求职软件中注意到,招C#的,主要是WPF,招WinForm的也有,但是很少。
1、抽象类和接口的区别
接口是一种标准、一种规范。
抽象类和接口都是将方法进行抽象,然后用子类去实现。
相同点:定义抽象方法;不能创建本类对象;
不同点:抽象类可以实现接口;接口只能继承接口,不能继承类;一个类只能继承一个抽象类,一个类可以实现多个接口;抽象类可以有构造函数,抽象类的构造器主要用于限定子类的构造行为,接口不能有构造函数,接口只能用final关键字定义静态常量;
抽象类的成员可以有各种访问修饰符(public protected private internal),接口的成员默认public,不能使用访问修饰符。接口可以继承多个接口。类只能单继承、一个类只能继承一个基类。
接口是更加纯粹的抽象类。
2、c#值类型和引用类型的区别
值类型主要在栈上分配内存,存储实际的数据值,常见的值类型有:int float double decimal bool char byte short long enum struct
引用类型在堆上分配内存,存储指向堆上对象的内存地址,常见的引用类型有:类、接口、数组、 委托
3、new的作用
创建对象实例:调用构造函数来创建一个新对象,并在托管堆上为其分配内存。
隐藏基类成员:当在派生类中使用new修饰符定义一个与基类中同名的成员时,它表示隐藏基类的成员,而不是override它。
作为泛型约束:在定义泛型类或方法时,可以使用new()约束来要求类型参数必须具有一个公共的无参数构造函数。
创建匿名类型:new用于创建匿名类型,这是一种没有名称的、只读的引用类型
4、oracle数据库的客户端
面试官问了有没有用过数据库,我回答使用了oracle数据库,面试官接着问客户端用的是啥,没回答上来。
还问了ADO.net以及其他的,回答的不好。