2007年10月26日

C#+ASP.NET程序员面试基础问题和答案

C#程序中,接口是用来定义一个类的功能的.接口定义了预期的方法,属性,事件信息.为了使用接口,每个具体的函数必须严格按照接口的定义完成所描述的功能

如果你的简历上面写“熟悉/了解C#”,那么你就应该能够回答下面的这些基础问题

传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。

如何在C#中实现继承?
在类名后加上一个冒号,再加上基类的名称。

C#支持多重继承么?
不支持。可以用接口来实现。

被protected修饰的属性/方法在何处可以访问?
在继承或间接继承与这个类的子类中可以访问。

私有成员会被继承么?
会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。

请描述一下修饰符protected internal。
被protected internal修饰的属性/方法只能在它的在同一个程序集(Assembly)中的子类被访问。

C#提供一个默认的无参数构造函数,当我实现了另外一个有一个参数的构造函数时候,还想保留这个无参数的构造函数。这样我应该写几个构造函数?
两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参数构造函数。

C#中所有对象共同的基类是什么?
System.Object.

重载和覆写有什么区别?
重载提供了对一个方法签名的不同参数调用的实现。覆写提供了子类中改变父类方法行为的实现。

在方法定义中,virtual有什么含意?
被virtual修饰的方法可以被子类覆写。

能够将非静态的方法覆写成静态方法么?
不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。

可以覆写私有的虚方法么?
不可以,甚至子类中无法访问父类中的私有方法。

能够阻止某一个类被其他类继承么?
可以,使用关键字sealed。

能够实现允许某个类被继承,但不允许其中的某个方法被覆写么?
可以,标记这个类为public,并标记这个方法为sealed。

什么是抽象类(abstract class)?
一种不可以被实例化的类。抽象类中一般含有抽象方法,当然也可有具体实现。继承类只有实现过所有抽象类的抽象方法后才能被实例化。

何时必须声明一个类为抽象类?
当这个类中包含抽象方法时,或是该类并没有完全实现父类的抽象方法时。

接口(interface)是什么?
只含有共有抽象方法(public abstract method)的类。这些方法必须在子类中被实现。

为什么不能指定接口中方法的修饰符?
接口中的方法用来定义对象之间通信的契约,指定接口中的方法为私有或保护没有意义。他们默认为公有方法。

可以继承多个接口么?
当然。

那么如果这些接口中有重复的方法名称呢?
这种情况中你可以决定如何实现。当然需要特别得小心。但是在编译环节是没有问题的。

接口和抽象类的区别是什么?
接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符。抽象类中可以有方法的实现,也可以指定方法的访问修饰符。

如何区别重载方法?
不同的参数类型,不同的参数个数,不同的参数顺序。

const和readonly有什么区别?
const关键字用来声明编译时常量,readonly用来声明运行时常量。

System.String 和System.StringBuilder有什么区别?
System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供一些对这个字符串修改的方法

什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?

概述.NET里对 remoting 和 webservice 两项技术的理解和实际中的应用。

远程逻辑调用,remoing接口只能用在.net中

概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性

 

序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。

new有几种用法

 

第一种:new Class();
第二种:覆盖方法 public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。

posted @ 2007-10-26 13:00 jueban's space 阅读(471) 评论(0) 编辑

DotNet 系统应用框架设计

DotNet 系统应用框架设计

Posted on 2007-06-05 10:31 Microbar 阅读(17) 评论(0)  编辑  收藏 所属分类: 设计模式
总体设计:
 

表示层

  • UI(User Interface)
    UI是客户端的用户界面,负责从用户方接收命令,请求,数据,传递给业务层处理,然后将结果呈现出来。根据客户端的不同我们大体将应用程序分为BS(Browser-Server) 浏览器结构,CS(Client-Server)桌面客户端结构。 BS的优点是无需操心客户端,只需要部署维护好服务器即可。CS的优点在于强大的界面交互表达能力。RIA(Rich Internet Application)是为了融合这两种结构优点的一种技术,它依赖在客户端一次性安装一个通用解释器之后即获得强大的界面交互表达能力和无需部署具体客户端的方便性。具体的实现技术很多,例如微软的SmartClient, Avalon; Macromedia的Flex;以JS为基础的Bindows;Ajax等等很多。

业务层

         业务层封装了实际业务逻辑,包含数据验证,事物处理,权限处理等业务相关操作,是整个应用系统的核心      

posted @ 2007-10-26 12:01 jueban's space 阅读(97) 评论(0) 编辑

反射

反射的作用:
1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。

1 需要反射的DLL

using System;
 
namespace Webtest
 {
  
public class ReflectTest
  {
 
public ReflectTest(){}
public string WriteString(string s)
  {
   
return "欢迎您," + s;
 }
//静态函数
public static string WriteName(string s)
 {
 
return "欢迎您光临," + s;
}
//不带参数的函数
 public string WriteNoPara()
 {
 
return "您使用的是无参数方法";
 }
 }
}


应用于反射的例子-在ASPNET页面中加入以下函数:
 
public void test1()
 {
 System.Reflection.Assembly ass;
 Type type ;
 
object obj;
 
try
{
ass 
= System.Reflection.Assembly.LoadFile(@"d:\TestReflect.dll");//要绝对路径
type = ass.GetType("Webtest.ReflectTest");//必须使用名称空间+类名称
System.Reflection.MethodInfo method = type.GetMethod("WriteString");//方法的名称
obj = ass.CreateInstance("Webtest.ReflectTest");//必须使用名称空间+类名称
string s = (string)method.Invoke(obj,new string[]{"jianglijun"}); //实例方法的调用
或:string s = (string)method.Invoke(obj,Object[] parametors = new Object[]{"param"}); 
Response.Write(s
+"<br>");
method 
= type.GetMethod("WriteName");//方法的名称
= (string)method.Invoke(null,new string[]{"jianglijun"}); //静态方法的调用
Response.Write(s+"<br>");

method 
= type.GetMethod("WriteNoPara");//无参数的实例方法
= (string)method.Invoke(obj,null);
Response.Write(s
+"<br>");
method 
= null;
}
catch(Exception ex)
{
 Response.Write(ex
+"<br>");
}
 
finally
 {
 ass 
= null;
 type 
= null;
 obj 
= null;
}
}



一个获取反射内容的方法
void getreflectioninfo(assembly myassembly) 

type[] typearr
=myassemby.Gettypes();//获取类型 
foreach (type type in typearr)//针对每个类型获取详细信息 

constructorinfo[] myconstructors
=type.GetConstructors; //获取类型的结构信息 
fieldinfo[] myfields=type.GetFiedls() //获取类型的字段信息 
MethodInfo myMethodInfo=type.GetMethods(); //获取方法信息 
propertyInfo[] myproperties=type.GetProperties //获取属性信息
EventInfo[] Myevents=type.GetEvents; //获取事件信息


posted @ 2007-10-26 11:06 jueban's space 阅读(22) 评论(0) 编辑