ASP.NET开发 笔试题目详解(4)——索引器(Indexer),FOREACH,ASP.NET 服务器控件的生命周期,接口和抽象类,自定义控件和一般用户控件的异同,面向对象的概念和特点

问题五:  描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
参考答案:索引器(Indexer)是C#引入的一个新型的类成员,它使得对象可以像数组那样被方便,直观的引用。索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用。下面是典型的索引器的设计,我们在这里忽略了具体的实现。

class MyClass{
    public object this [int index]{
        get{
             // 取数据
        }
        set{
             // 存数据
        }
    }
}

注意,这里的属性名是this,意思是回引类的当前实例,参数列表包含在方括号而非括号之内。索引器参数可以采用任何类型,不过int是通常采用也是最为合理的类型。同一个类中还可能拥有一个以上的索引器(重载)。

 

问题六  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.      在集合类中使用一个预定义的集合。

(ms-help://MS.NETFrameworkSDKv1.1.CHS/csref/html/vclrfusingforeachwithcollections.htm#vclrfforeachcollections_example1)


问题七:  ASP.NET 服务器控件的生命周期:
1. 初始化  - Init 事件 (OnInit 方法)。
2. 加载视图状态 - LoadViewState 方法。
3. 处理回发数据 - LoadPostData 方法,
    对实现 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 方法)。

 

问题八:  接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?

“抽象类”是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能。

“接口”是完全抽象的成员集合,可以被看作是为操作定义合同。接口的实现完全留给开发者去做。
这里是一些建议,帮助您决定使用接口还是抽象类为组件提供多态性:

如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。 
如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。


问题九:  自定义控件和一般用户控件的异同?
用户控件模型适合创建内部应用程序特定的控件,而自定义控件模型更适合创建通用的和可再分发的控件。

 

问题十:  面向对象的概念、主要特点。

封装(wrap)、继承(inheritance)、重载(override)、多态(polymorphism)。

你可能感兴趣的:(DotNet笔试面试题)