大家好,我是Lampard~~
经过春招一番艰苦奋战之后,我终于是进入了心仪的公司。
今天给大家分享一下我在之前精心准备的一套面试知识。
今天和大家分享的是C#的面试题
本人亲测80%的引擎相关题目都是围绕着我总结出来的知识点提出的 。
一. 结构和类的区别
1.结构是值类型,类是引用类型
2.结构不能够有初始值,类可以有初始值
3.构造方法在类里面名字和类相同且没有返回类型
构造方法在结构里面不能定义无参的构造函数,且对结构体里面所有的属性赋值
4.结构在栈中,类在堆中
二.什么是枚举
枚举属于值类型
枚举是从0开始递增的整数
enum Gender
{
男,女 // 注意它的内容不是字符串,不用加双引号
} // 男用Gender【0】,女是Gender【1】
三.Ref关键字
想把值类型当作引用类型传过去就需要这个ref关键字,有点像c++传指针
int age=3;
Growth(ref int age)
{
age++;
}
Growth(ref age);// 注意不要忘记带ref
四.Out关键字
使用Out关键字在函数里返回多值,return只能返回一个
五.继承
C#里面只有单继承
代码中继承用:来实现
六.重载和重写
一.重载
新方法的名字相同,但是方法的参数个数或者类型不一样
二.重写
新方法的名字和参数个数类型完全相同,在同一个类中编译会不过关,
在继承它的子类中这样的做法叫做重写,最好加上override关键字
七.虚方法
基类有共性,子类有差异性。提高代码重用率
虚方法:声明为virtual的方法就是虚方法。基类的虚方法可以
在派生类中使用override进行重写
多态:通过指向派生类的基类引用,调用虚函数,会根据引用所指向
派生类的实际类型,调用派生类中的同名重写函数,便是多态。
static和private的方法不能重写
八.密闭类和密闭方法
密闭类:有些类不希望被继承
密闭方法:不希望其他人重写这个方法
关键字:sealed
sealed override public void Speak() // 用了sealed之后该派生类就不可以重写该方法
{
Console.WriteLine("汪汪汪");
}
九.接口interface
接口就是指定一组函数成员,而不实现他们得引用类型 (不能加public)
!!!就像抽象类一样只能被继承,是一种引用类型
!!!一个类可以有多个接口,基类要放在最前面
十.静态方法和静态变量
静态方法和静态变量只属于这个类,不单属于某个对象
十一. 泛型
泛型的优势
1.代码量更小,无论多少种笼子,我们只需要一个实现
2.只有需要的类型才会被实例化
3.易于维护,修改模板,所有的实例都会被改变
实例化:
class Cage
Cage
default(T)可以得到该类型的默认值
!!!使用的时候,客户必须通过尖括号内的类型声明
并实例化创造类型
泛型方法:参数可泛型化
class Dog{
void DogIsHappy
}}
十二.约束where
A.主约束 class/struct B.接口约束 C.构造约束
例子:
void Cage
where T :pet,Dog
// 可以调用宠物的函数
十三.委托
委托是持有一个或者多个方法的对象
可以被执行,可以被传递
public delegate void ActCute();
ActCute actCute = new ActCute(同类型的方法名称!!!不用加()); // 委托的类型,返回void
所有的void类型的方法都可以存进去
!!!调用一次委托等于执行了所有的方法
actCute = actCute+方法二;//不用加()
// 此时actCute 已经存在了两个方法
委托是什么类型的,方法就是什么类型的
十四.事件event相当于菜单项,委托相当于回调函数,观察者模式
发布者和订阅者
发布者:通知某件事情发生的,就是发布者。
订阅者:对某件事关注的,就是订阅者。
通知:事件声明
被通知:注册
delegate void Handler(); // 委托,当事件发生时会调用委托
public event Handler NewDog; // 声明关键字event ,事件名NewDog
事件订阅
NewDog = NewDog + 方法
// 关注
NewDog = NewDog - 方法
// 取消关注
事件触发
if(NewDog! = null)
{
NewDog();
}
十五.泛型接口
接口定义了苏好习惯,方法和事件,这些都是接口的成员。
接口只包括了接口的定义,不接受接口的声明
public interface IDemo
{
void show(int i);
// 普通的接口
}
public interface IDemo
{
void show(T t);
// 泛型的接口
}