属性实际上是一个派生自System.Attribute基类的类。System.Attribute类含有几个用于访问和检查自定义属性的方法。尽管你有权将任何类定义为属性,但是按照惯例来说,从System.Attribute派生类是有意义的
79.C#可否对内存进行直接的操作?
可以,我们知道,.NET相比C++最值得称赞的是他的GC(垃圾回收机制)。GC会在系统空闲或内存不足的时候自动回收不再被使用的对象。因此,我们不再需要向C++编程一样处处小心内存泄漏。同时,为了提高内存的使用效率,GC在回收内存的时候,会对内存进行整理,有些类似硬盘整理的原理。从而导致对象被在内存中移位。
80.维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么
尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。
81.ADO.NET相对于ADO等主要有什么改进?
ADO以Recordset存储,而ADO.NET则以DataSet表示。Recordset看起来更像单表,如果让Recordset以多表的方式表示就必须在SQL中进行多表连接。反之,DataSet可以是多个表的集合。ADO 的运作是一种在线方式,这意味着不论是浏览或更新数据都必须是实时的。ADO.NET则使用离线方式,在访问数据的时候ADO.NET会利用XML制作数据的一份幅本,ADO.NET的数据库连接也只有在这段时间需要在线。由于ADO使用COM技术,这就要求所使用的数据类型必须符合COM规范,而ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致的数据类型转换,从而提高了整体性能。
82.C#中要使一个类支持FOREACH遍历,实现过程怎样?
若要循环访问集合,集合必须满足特定的要求。例如,在下面的 foreach 语句中:
foreach (ItemType item in myCollection)
myCollection 必须满足下列要求:
集合类型:
必须是 interface、class 或 struct。
必须包括返回类型的名为 GetEnumerator 的实例方法,例如 Enumerator。
Enumerator 类型(类或结构)必须包含:
一个名为 Current 的属性,它返回 ItemType 或者可以转换为此类型的类型。属性访问器返回集合的当前元素。
一个名为 MoveNext 的 bool 方法,它递增项计数器并在集合中存在更多项时返回 true。
有三种使用集合的方法:
1.使用上述指导创建一个集合。此集合只能用于 C# 程序。
2.使用上述指导创建一个一般集合,另外实现 IEnumerable 接口。此集合可用于其他语言(如 Visual Basic)。
3.在集合类中使用一个预定义的集合。
83.接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?
接口是一个纯粹的抽象类,没有任何实际的东西,只是定义了一个框架,而抽象类里面可以有实际的一个方法,并不要求所有的方法都是抽象的。可以实现一个接口中的所有方法,也可以继承一个抽象的类,然后覆写其中的方法。接口一般只有方法,而没有数据成员或属性。抽象类有方法,也有数据成员或属性,一般情况下,优先考虑用接口,只有当可能要访问到数据成员或属性时,用抽象类。
84.自定义控件和一般用户控件的异同?如果要用这两者之一,你会选择哪种?为什么
用户控件模型适合创建内部,应用程序特定的控件,而自定义控件模型更适合创建通用的和可再分发的控件
85.大概描述一下ASP.NET服务器控件的生命周期
1. 初始化 - Init 事件 (OnInit 方法)
2. 加载视图状态 - LoadViewState 方法
3. 处理回发数据 - LoadPostData 方法:s对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件,如 TextBox, DropDownList 等。
4. 加载 - Load 事件 (OnLoad 方法)
5. 发送回发更改通知 - RaisePostDataChangedEvent 方法 :对实现 IPostBackDataHandler 接口的控件,即可以自动加载回发数据的控件。 在第 3 步中加载回发数据,如果回发前后数据发生更改,则在这一步触发相应的服务端事件。
6. 处理回发事件 - RaisePostBackEvent 方法:对实现 IPostBackEventHandler 接口的控件,即能引起回发的控件,如 Button, LinkButton, Calendar 等
7. 预呈现 - PreRender 事件 (OnPreRender 方法)
8. 保存视图状态 - SaveViewState 方法
9. 呈现 - Render 方法
10. 处置 - Dispose 方法
11. 卸载 - UnLoad 事件 (OnUnLoad 方法)
86.UML
統一建模语言( U M L)是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制。
87.谈谈final, finally, finalize的区别。
final 修饰符用于指定类不能扩展或者方法或属性不能重写。它将防止其他类通过重写重要的函数来更改该类的行为。带有 final 修饰符的方法可以由派生类中的方法来隐藏或重载。finally 块用于清除在 try 块中分配的任何资源。控制总是传递给 finally 块,与 try 块的存在方式无关。finalize允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。
88.&和&&的区别。
&&为逻辑与,输出结果为布尔(真假)型; &为按位与,输出结果为数值型。
89.GC是什么 为什么要有GC
GC是垃圾收集器。这个类别中的方法会影响什么时候对对象执行内存回收,以及什么时候释放对象所配置的资源。这个类别的属性会提供系统中可用内存的总数量以及配置至对象的内存之年龄分类或层代等等相关信息。内存回收行程会追踪并重新利用在 Managed 内存中配置的对象。内存回收行程会定期执行内存回收来重新利用配置给对象的内存 (该对象并无有效的参考)。当没有可用的内存来因应内存的要求时,会自动发生内存回收。或者,应用程序可以使用 Collect 方法来强制进行内存回收。
内存回收包含下列步骤:
a.内存回收行程会搜寻在 Managed 程序代码中所参考的 Managed 对象。
b.内存回收行程会尝试最终处理未参考的对象。
c.内存回收行程会释放未参考并且回收其内存的对象。
90.Math.round(11.5)等於多少 Math.round(-11.5)等於多少
Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2
求其floor
91.short s1 = 1; s1 = s1 + 1;有什么错 short s1 = 1; s1 += 1;有什么错
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
92.数组有没有length()这个方法 String有没有length()这个方法:
在c#数组和string只有length属性,没有方法
93.abstract class和interface有什么区别
abstract 修饰词可用于类别、方法、属性、索引子 (Indexer) 和事件。在类别宣告里使用 abstract
饰词,表示该类别只是当做其它类别的基底类别而已。成员如果标记为抽象,或是包含在抽象类(Abstract Class) 内,则必须由衍生自此抽象类别的类别实作这个成员。
在静态属性上使用 abstract 修饰词是错误的。
在抽象方法宣告中使用 static 或 virtual 修饰词是错误的。
接口只包含方法、委派或事件的签章。方法的实作 (Implementation) 是在实作接口的类别中完成,
94.是否可以继承String类
否,无法继承自密封类
95.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后
会,在return后.
96.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
不对,有相同的GetHashCode();
97.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那
这里到底是值传递还是引用传递
引用传递
98.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
都可以
99.编程题: 写一个Singleton出来。 100.c#中的三元运算符是
a?b:c
101.当整数a赋值给一个object对象时,整数a将会被
装箱
102.类成员有_____种可访问形式?
this.;new Class().Method;
103.public static const int A=1;这段代码有错误么?是什么?
const不能用static修饰
104.float f=-123.567F; int i=(int)f; i的值现在是 -123
105.委托声明的关键字是______ delagete 106.用sealed修饰的类有什么特点?
密封,不能继承sealed 修饰词可套用至类别 (Class)、执行个体方法 (Instance Method) 和属性。密封类别无法被继承。密封方法会覆写基底类别 (Base Class ) 中的方法,但在任何衍生类别中却无法进一步覆写密封方法本身。当套用至方法或属性时,sealed 修饰词必须一律和 override (C# 参考) 搭配使用。
107.在Asp.net中所有的自定义用户控件都必须继承自
System.Web.UI.UserControl
108.在.Net中所有可序列化的类都被标记为_____
[Serializable]