c++转C#转型培训.docx
《c++转C#转型培训.docx》由会员分享,可在线阅读,更多相关《c++转C#转型培训.docx(53页珍藏版)》请在冰豆网上搜索。
![c++转C#转型培训.docx](https://file1.bdocx.com/fileroot1/2022-10/26/0ab0a851-0908-463b-a48d-15ac8bb03cec/0ab0a851-0908-463b-a48d-15ac8bb03cec1.gif)
c++转C#转型培训
复习题
1.什么是类?
什么是结构体?
二者有什么区别?
相同点是什么?
你经常使用类还是结构体?
为什么?
类:
同一类对象共同属性和行为的抽象
结构体:
同一类共同属性和行为的抽象
二者区别:
类:
引用类型结构体:
值类型
二者相同点:
对共同属性和行为的抽象
2..怎样理解静态变量和静态方法?
静态构造函数的作用是什么?
静态变量:
属于类,不属于对象
静态方法:
不用创建类的实例,直接使用类的方法,方法变量在栈上,
静态构造函数的作用:
初始化类的静态数据成员,在代码加载时执行;
程序中无法调用静态构造函数,此前的任何修饰符都是无效的;
静态构造函数,没有参数
3.值类型与引用类型有什么区别?
值类型:
数据存储在栈上,直接存储数据本身
引用类型:
数据存储在堆上,在栈上引用其地址
二者区别:
●所有内置对象,除了object和string以外,都是值类型,所有用户定义类型,除了结构体都是引用类型;
●C#内置值类型(13种)
类型
大小(字节)
.net类型
说明
byte
1
Byte
无符号(0-255)
八
种
整
型
sbyte
1
Sbyte
有符号(-128~127)
short
2
Int16
有符号(short)
(-32768~32767)
ushort
2
Unt16
无符号(short)
(0~65535)
Int
4
Int32
Uint
4
Uint32
Long
8
Int64
Ulong
8
Uint64
Char
2
Char
Unicode字符
float
4
Single
三
种
浮
点
型
Double
8
Double
Decimal
8
Decimal
bool
1
Boolean
Trueorfalse
●除了基本类型,C#还有两种值类型:
enum(枚举)和struct(结构);
●编译器会默认带小数点的数位double类型,要赋值给一个float型变量,需要在数字后面加上f;
●常见转义字符:
\’单引号\”双引号\\反斜杠\0空\a警铃\b回退\f换页\n换行\r回车\t水平制表\v垂直制表
4.override与重载有什么区别?
Override:
覆盖:
在继承关系中,父类中的虚方法,在子类中需要重写时
Overload:
重载:
同一个类中,函数名相同,参数列表不同,实现不同功能
5.你在什么情况下会用到虚方法?
它与接口有什么不同?
子类要重写父类中的方法时,父类中方法应声明为虚方法;
接口:
只有方法声明,没有方法体,可以有属性和索引器(都是方法),有概念上的共同特征,要用接口实现,没有方法体
虚方法:
不但有方法声明,还要有方法体
6.什么是抽象方法?
什么是抽象类?
抽象方法:
只有方法签名,没有方法体
抽象类:
类前加关键字abstract,则为抽象类,抽象类不能创建对象
一个类中,如果有抽象方法,则该类一定位抽象类;但是抽象类中不一定有抽象方法
7.怎样理解类、抽象类、和接口之间的异同?
抽象程度不同:
接口:
最高程度抽象,忽略对象,只考察行为概念,不考虑行为的具体实现
类:
对对象属性和行为的抽象,以及重点考察方法的具体实现过程
抽象类:
二者中间:
行为一样,实现不同
8..c#是一种纯粹面向对象的语言。
面向对象语言具有什么特点?
抽象,封装(结果是类),继承,多态
9.类和类之间有哪些关系?
继承,多态,聚合,组合
10.@的作用是什么?
是转义字符失效,用在常量字符串前
表示常量字符串没有需要转义的字符
11.什么是序列化?
为什么要序列化?
(什么时候必须作序列化?
)如何实现序列化?
序列化:
把对象数据成员转化为字节流,只序列化数据成员,不序列化方法
为了把对象保存到存储介质或者在网络上传输,做序列化!
默认的序列化方法:
类的定义前加属性:
Serializable,编译器会将序列化方法添加到类中
自定义序列化方法:
接口:
ISerilizable(GetOjbectData方法),还需要加上属性
凡序列化:
BinaryFormatter,SoapFormatter
12.阐述C#中的访问修饰符。
类和类的成员的访问修饰符分别有哪些?
权限是什么?
类中的Public:
任何地方都可用,Internal:
当前程序集中可用
类成员的
Public:
Protected:
本身和子类
Private:
13.什么是操作符重载?
为什么要操作符重载?
如何实现操作符重载?
操作符重载:
在不改变操作符固有的含义情况下,重新定义操作符,目的:
扩大操作符的原有作用范围,必须公有,静态,放在一个类中
四对操作符必须成对重载:
><;>=<=;==!
=;true,false;
PublicStatic返回类型operator——(参数列表),该操作符,作用在该类上
ClassA
{
PublicStatic返回类型operator——(Aa,。
。
。
)//必须出现一个
}
14.C#中有指针吗?
十三种基本数据类型有指针,其他数据类型没有指针,在非安全模式下用
15..c#中的委托是什么?
事件是不是一种委托?
委托的作用是什么?
委托:
是一种特殊的类:
不用Class而用Delegate定义,
目的:
封装一个方法的名称
作用:
取代C++中的函数指针,把方法封装在委托对象中
定义委托对象,达到传递方法的目的
事件时委托定义的一个变量,事件只能作为类的数据成员出现,不能再方法体中出现
16.什么是应用程序域?
将进程的进一步划分为多个应用程序域,每个应用程序域运行一个应用程序。
应用程序域之间相互隔离,互不影响。
17.怎样理解托管代码?
运行在。
NET平台上的代码,运行在CLR(CommomLanguageRuntime)公共语言运行库上的代码,都是托管代码
18.怎样理解强类型系统?
强类型系统:
声明变量时,就指定其存放的数据类型,如C#;JavaScript是弱类型系统
19.解释装箱和拆箱
装箱:
值类型到Ojbect类型,或者该值类型所实现的任何接口类型之间的转换。
对值类型装箱,会在堆上分配一个实例对象,并将该值复制到新的对象中。
在栈上在堆上
Inti=123;
图示:
Objecto=i;
拆箱与该操作相反。
20.const和readonly的区别是什么?
ref、out、和params的作用和区别是什么?
Const:
定义常量,只能在定义时,初始化;(只能在构造函数时赋值)
Readonly:
只读变量,可以在定义时初始化,也可以在构造函数里初始化(定义时与构造函数时赋值)
Ref:
强制引用传递,阻止形参对实参的临时拷贝,实参和形参指向同一存储区域,
Out:
Params:
修饰传递可变参数的数组,(主要用于函数个数不定得时候)
21.这些符号的含意是什么:
&、&&、|、||、!
、^、~。
&:
按位与,
&&:
逻辑与,操作数为逻辑表达式,;
短路现象:
a1=T,a2=F,(a1=null计算A1&&a2汇报错)a1&&a2,a2&&a1,a1||a2,a2||a1,1.结果一样2。
效率不一样。
|:
||:
!
:
逻辑非
~:
按位取反
^:
异或
22.CTS、CLS、CLR是什么?
图示VB.Net、C#.net、CTS、CLS、CLR之间的关系?
CTS:
CommonTypeSystem公共类型系统
CLS:
CommonLanguageSpecification公共语言规范
CLR:
CommonLanguageRuntime公共语言运行库
跨语言开发:
CTS;C#.NET,C++,VB等语言遵循CLS,---CTS---CLR
23.c#中property与attribute的区别,他们各有什么用处,这种机制的好处在哪里?
Property:
类中的一种成员,如:
方法,索引器,一般格式:
publicstringName{get{returnthis._name;}set{this._name=value}
Attribute:
(本身是一个类)一种解释说明,用来解释如何编译源代码,一般用[……]包含起来
用处:
property:
私有成员的读写;(与索引是同一类东西)避免私有成员的直接暴露。
Attribute:
加入注解和说明
24.TCP、UDP的异同?
TCP:
面向连接的,可靠的,传输控制协议,速度慢
UDP:
非面向连接的,不可靠的,用户数据包协议,速度快
25.怎样把array复制到arraylist中?
Int[]arr=newInt[]{1,0,2,3,4,5,6};
ArrayListlist=newArrayList(arr);
26.将数组a1中从第6个成员起10个数据成员拷贝到数组a2中
Array.Copy(a1,6,a2,0,10);
Array.Sort(a1);升序排序
Array.Reverse(a1);倒序排序
27.string和strbuilder的区别,为什么要写这两个类?
String:
定长的常量字符串。
Strings=“abc”;
Stringbuilder:
可变字符串
S1=”hello”;
S2=”World”;
S1+=s2;
StringBuilderbuilder=newStringBUlder(s1);
Builder.Append(s2);
内部字符数组:
默认为十六个字符
28.什么是程序集?
强命名?
GAC?
程序集:
面向.NETFramework已经编译好的可独立发布最小逻辑单元,
强命名:
strongName标识程序集,加强了的名字,名字+公钥(ID)+版本+文化
GAC:
全局程序集缓存GlobalAssemblyCache,本质上是一个文件夹assembly
29.接口有几种实现模式?
请解释接口的显式实现有什么意义?
实现模式:
显示,隐式;实现方法时,前面加上接口的名字,即为显示实现模式,反之,为隐式实现模式
意义:
一个类继承多个接口的时候,签名相同的方法需要实现时,必须使用显示实现模式,以区别于不同的接口
30.请列出c#中几种循环的方法,并指出他们的不同
For:
带有索引的集合,用For循环
Foreach:
使用范围广,当一个集合实现IEnumerator接口或者GetEnumerator()方法时,可以用该循环方法,
Foreach(Objectoinlist)其中o为只读的。
While:
Do……while:
至少执行一次
31..通过超连接怎样传递中文参数?
HyperLinklink=newHyperLink();
1.Link.NavgatorUrl=string.Format(“~/Default.aspx?
Name={0}”,HttpContext.Current.Server.UrlEncode("中文名称"));
2.HttpUtility.UrlEncoding();
32.请编程遍历页面上的所有textbox控件并给它赋值为string.empty?
Foreach(System.web.UI.WebControlcontrolin