C#基础、高级习题

1.C#访问修饰符?
private:私有成员,类内部可访问,类和类成员
public:公开成员,没有访问限制,所有的都可访问,类和类成员
protected:保护成员,类和继承类可访问,类和内嵌类
internal:同一程序集下可访问,类和内嵌类
internal protected/protected internal:同一程序集下可访问,类和内嵌类
2.重载和重写?
重载:方法名称相同,方法的参数列表不同,调用时编译器会根据所传入的参数,选择相匹配的方法进行调用;
重写:当一个子类继承父类时,其方法名称、参数列表都与父类保证一致时,就说明这个子类重写了父类;
相同点:都是多态的体现,方法名称相同
不同点:
重载参数不同,重写参数必须一致;
重载可以没有返回值,重写返回值必须一致;
重载在编译时多态,重写在运行时多态;
重载不需继承,重写必须继承。
3.out参数和ref参数?
out参数:输出参数
①在方法体结束之前,必须对out参数进行赋值;
②方法中的形参为out类型时,对应的实参也必须时out类型;
③在调用out参数的方法时,需准备一个相同类型的变量来接收out的结果;
④可视作out参数为方法的返回值。
ref参数:引用传参
①方法中的形参为ref类型时,对应的实参也必须时ref类型;
②如果方法内参数发生了改变,则会永久性的发生改变。
4.数组和集合的区别?
数组:用来存储数据的集合;
集合:用于数据存储和检索类;
区别:
数组需要声明类型,集合不需要;
数组是定长的,不能改变其大小,集合不是定长的,可根据内容改变大小;
数组存放类型只能是一种,集合可以是多种;
数组是多维的,集合只能是一维的。
5.C#中的特殊函数?
构造函数:如果类中没有声明构造函数,系统会自动生成一个构造函数,当类被实例化时所执行的函数。
析构函数:一个类只允许一个析构函数,或者没有析构函数,当类生成的对象被释放时所执行的函数。
6.static用法?
①不能实例化
②类里面的成员必须是静态的
③它是一个抽象的密封类,所以不能被继承
④不能包含实例构造函数
⑤访问类中的公开成员,直接使用类名点
⑥在静态的方法中只能访问外部的静态成员
7.委托是什么?事件是不是委托?
委托就是将方法作为方法的参数代入到另一个方法中
0代表无参 1代表返回类型
Action委托:可有可无参数,无返回值(0)
Func委托:可有可无参数,有返回值(0+1)
事件是一种消息机制,是一种特殊的委托
8.C#类和结构异同?
不同点:
类:属于引用类型,可以继承和被继承,必须有new初始化,有构造函数和析构函数,可以有字段赋值
结构:属于值类型,不支持继承和被继承,可以不new初始化,没有构造函数,但可以添加,没有析构函数,没有字段赋值
相同点:
①它们的基类都是object
②都包含属性和方法
9.string和stringBuilder用法?
string:属于引用类型,string是String的别名,来自System.Object的命名空间,string是C#中的类,String是.NET Framework的类,string是关键字,String不是,
string不可以作为结构、类、枚举的名称,String可以;
stringBuilder:属于引用类型,来自System.Text的命名空间,使用时必须实例化,自身是类,支持空参构造,默认空参,初始化时,如果字符串内容大小超出初始化大小,
会开辟一个新的空间,将原来的复制到新空间里,继续追加长度,旧空间会销毁,引用新的空间,新空间是旧空间的基础倍。
10.抽象、虚拟?
抽象函数:有方法名称,没有方法体,子类继承父类时,必须重写其父类的抽象方法;
虚拟函数:有方法体的实现,子类可以继承父类,也可以重写父类。
相同点:都可以重写
不同点:
①抽象函数没有方法体的实现,虚拟函数有;
②抽象函数只能在抽象类中声明,虚拟函数不是;
③派生类必须重写抽象类中的抽象方法,虚拟还是不是。
11.类和接口的异同?
相同点:
①都支持从多个接口继承;
②都包含属性、方法、索引器
不同点:
①类支持实例化,接口不支持实例化;
②类支持方法的实现,接口不支持方法的实现;
③类支持单继承,接口支持多继承;
④接口不包含常量、字段,类包含。
12.进程、线程、同步、异步?
一个程序包含一个进程,一个进程包含多个线程
进程:是指系统进行资源分配和调度的单位;
线程:是指CPU进行分派和调度的单位。
同步:当一个程序调用某个方法时,等待其执行完所有的处理后继续执行;
异步:当一个程序调用某个方法时,在该方法执行完成之前就返回到调用方法。
13.C#继承?
类与类之间的关系,实现代码的多重
子承父业,子类会继承父类的属性、方法等;
父类具有的子类不一样具有,相反一样;
不支持多重继承,但可以实现多个接口的继承
14.break、continue、return
break:跳出当前循环,执行之后的代码;
continue:跳出当前循环,执行下一次循环;
return:跳出当前循环,直至代码块结束。
15.三次握手的作用?
第一次握手:保证客户端能够具有发送数据的能力;
第二次握手:保证服务端能够接收到数据,并且保证服务端能够具有发送数据的能力;
第三次握手:保证客户端能够接收到数据
16.Socket通信服务端和客户端?
服务端:
①创建一个Socket对象,用函数Socket();
②用指定的IP地址、端口号信息建立一个EndPoint对象;
③使用函数Bind()绑定EndPoint;
④开始监听listen();
⑤连接客户端,用函数accept();
⑥收发数据,用函数Send()和Receive();
⑦关闭网络连接
⑧关闭监听
服务端:
①创建一个Socket对象,用函数Socket();
②用指定的IP地址、端口号信息建立一个EndPoint对象;
③设置要连接对方的IP地址、端口号信息;
④连接服务器,用函数connect();
⑤收发数据,用函数Send()和Receive();
⑥关闭网络连接
1.面向对象?
通过封装对象的属性,来实现对象的方法、事件,以此得到最终的对象。
2.15种属性类型?
byte、sbyte、int、uint、short、ushort、long、ulong
double、float、decimal
string、bool、object、char
3.属性赋值:
①如果是预定义的15种,直接赋值;
②等号后面敲空格,如果出现智能提示,直接敲点,选择一个合适的选项分号结束;
③特殊类型,等号后面直接使用属性类型,选择一个分号结束;
④排除前面的所有,等号后面先new,敲个空格,出现只能提示直接一堆小括号分号结束,删除前半个括号,再添加上,针对括号中每一个属性继续使用这四个方法。
4.对象、类、命名空间?
对象:包含属性(外貌特征)、方法(主动的行为)、事件(被动的行为)
类:是对象的抽象化,也是由属性、方法、事件构成,类不能直接使用,如需使用,必须先将这个类实例化成对象。
5.值类型、引用类型?
值类型:存放在堆栈中,内存空间小,调用速度快,从System.ValueType中派生,内存自动释放,直接存储其值,值类型包含结构体、枚举、可空类型;
引用类型:存放在堆中,内存空间大,调用速度慢,从System.Object 中派生,内存由GC释放,直接存储其值的引用指针,引用类型包含string、object、数组、集合、类;
6.类型转换?
隐式转换:看不见的,是C#是一种安全形式的转换;
显示转换:通过用户使用预定义函数显示完成。
convert:将一个基本数据类型转换为另一个基本数据类型;
Tostring:转换为字符串类型;
int.Parse():将string转换为int类型;
(char)Num:将Num转换为ASCII字符
7.全局变量、局部变量?
全局变量:在本程序任何地方都可以创建,可以被本程序所有对象引用;
局部变量:某对象所创建的变量,只能被内部引用,其他对象无法引用。
8.变量初始化?怎样保证?
变量初始化:通过在等号后面跟一个常量表达式进行赋值,是C#强调安全性的一种方式。
方法:变量定义在类或结构中,如果没有显示初始化,那么在创建变量时就会有默认值;
在方法、事件内定义变量,必须显示初始化,之后才能使用它们的值;如若没有,就会报错。
9.+作用?
①数学中的加法运算;
②拼接字符串
10.类的实例化?
实例化的本质就是讲一个类转化成一个新的对象。

猜你喜欢

转载自blog.csdn.net/wuke666666/article/details/89419665