c#继承: 程序员
base 表示当前对象基类的实例(使用base关键字能够调用基类的成员)this表示当前类的实例web
在静态方法中不可使用base和this关键字数据库
派生类会继承基类全部的成员可是构造函数和析构函数不会被继承编程
注意若是派生类的方法和基类的方法同名则基类中的方法将会被隐藏若是须要隐藏则可使用关键字new来隐藏若是不写new关键字默认处理为隐藏虽然基类中同名的方法被隐藏了可是仍是能够经过base关键字来调用c#
//若是子类方法的方法名和基类的方法名相同时,系统将隐藏基类同名方法,自动调用子类的同名方法浏览器
//派生类会继承基类全部的成员,可是不能显示调用基类的是有成员安全
//在派生类中不能够调用基类的是有成员,如num1,num2,可是能够实现调用基类方法服务器
virtual 用在基类中指定一个虚方法属性表示这个方法属性能够重写网络
override 用在派生类中表示对基类虚方法属性的重写app
不能重写非虚方法或静态方法重写的基方法必须是 virtualabstract 或 override 的为何 override 也能够重写呢由于基类中的 override 其实是对基类的基类进行的重写因为继承可传递因此也能够对基类中 override 的方法进行重写
override 声明不能更改 virtual 方法的可访问性override 方法和 virtual 方法必须具备相同的访问级别修饰符
不能使用修饰符 newstaticvirtual 或 abstract 来修改 override 方法
重写属性声明必须指定与继承属性彻底相同的访问修饰符类型和名称而且被重写的属性必须是 virtualabstract 或 override 的
标记容许被重写修饰静态方法中不容许使用virtual关键字成员变量容许使用virtual关键字
属性能够被声明为虚属性(使用virtual关键字)
重写基类的方法(重写同名的方法中有virtual关键字的方法)
重写和隐藏的区别隐藏(new关键字)是给子类的同名方法分配新的内存空间重写(override关键字)是子类的同名方法放在基类同名方法的原来所在位置基类的同名方法位置向后移
属性也能够重写
virtual关键字和override关键字是成对出现的不然是语法错误
派生类能够经过将重写声明为 sealed 来中止虚拟继承这须要在类成员声明中的 override 关键字前面放置 sealed 关键字
在子类中重写基类中的虚方法时可使用base关键字调用基类中的虚方法
//使用base关键能够在子类中访问基类同名的方法
//父类的引用指向子类的实例
Test ts = new Test2();
父类的引用指向子类的实例(调用的是子类的方法)
父类的引用只认识父类的方法不认识子类的新方法能够用来调用被子类覆盖的父类的方法
父类的引用依然到父类方法位置去调用若是基类方法被声明为virtual而且在子类中被override结果访问到的是被子类override的方法
C#中的委托是什么?事件是否是一种委托?
委托能够把一个方法做为参数代入另外一个方法。委托能够理解为指向一个函数的引用。是,是一种特殊的委托
C#中的堆和栈
栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除;
堆(Heap)中保存值和对象,调用完毕以后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除
你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:经过参数化类型来实如今同一份代码上操做多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用
好处是——类型安全和减小装箱、拆箱。提升性能、类型安全和质量,减小重复性的编程任务
C#中全部对象共同的基类是什么?
System.Object.
如何在C#中实现继承?
在类名后加上一个冒号,再加上基类的名称。
C#支持多重继承吗?
不支持。能够用接口来实现。
被protected修饰的属性/方法在何处能够访问?
在继承或间接继承与这个类的子类中能够访问。
私有成员会被继承么?
会,可是不能被访问。因此看上去他们彷佛是不能被继承的,但实际上确实被继承了。
C#提供一个默认的无参构造函数,当我实现了另一个有一个参数的构造函数时,还想保留这个无参数的构
造函数。这样我应该写几个构造函数?
答:两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,因此须要手动实现那个无参构造
函数。
简述 private、 protected、 public、 internal 修饰符的访问权限。
private : 私有成员, 在类的内部才能够访问。
protected : 保护成员,该类内部和继承类中能够访问。
public : 公共成员,彻底公开,没有访问限制。
internal: 在同一命名空间内能够访问。
new的两种用法
答:实例话对象,隐藏基类方法。
.new有几种用法
第一种:new Class();
第二种:覆盖方法
public new XXXX(){}
第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。
3.datagrid.datasouse能够链接什么数据源 [dataset,datatable,dataview]
dataset,datatable,dataview , IList
类成员有( )种可访问形式
可访问性:public ,protected ,private,internal
委托与事件的用法
答:public delegate void handels();//返回值是void,没有参数
public event handels eventHandels;
his.eventHandels = new handels(fun);
public void fun()
{ }
传入某个属性的SET方法的隐含参数的名称是什么?
答:value,它的类型和属性所声明的类型相同。
string是值类型仍是引用类型?
引用类型
String类与StringBuilder类有什么区别?为何在.Net类库中要同时存在这2个类?(简答)
stringBuilder比string更节约内存,因此stringBuilder更快
String 对象是不可改变的。每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要
在内存中建立一个新的字符串对象,这就须要为该新对象分配新的空间。而 StringBuilder 则不会。在须要对字
符串执行重复修改的状况下,与建立新的 String 对象相关的系统开销可能会很是昂贵。若是要修改字符串而不
建立新的对象,则可使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串链接在一块儿时
,使用 StringBuilder 类能够提高性能。
在C#中,string str = null 与 string str = “” 请尽可能使用文字或图象说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间。
ASP.net的身份验证方式有哪些?分别是什么原理?
答:Windwos(默认) 用IIS...From(窗体) 用账户....Passport(密钥)
Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中因为有进程回收机制,系统繁忙的话Session会丢失,能够用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件
c#中的三元运算符是 ?:
.能用foreach遍历访问的对象须要实现()接口或声明 ( GetEnumerator)方法的类型。
.<%# %> 和 <% %> 有什么区别?
<%# %>表示绑定的数据源 <% %>是服务器端代码块 常量
在.net(C# or vb.net)中如何得到当前窗体或控件的句柄,特别是控件自己的句柄(请列举)
this(C#) Me(vb.net).
.C#能否对内存进行直接的操做?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序员 不过在C#中,不能直接实现Finalize方法,而是在析构函数中调用基类的Finalize()方法
DateTime是否能够为null?不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null
DateTime.Parse(myString); 这行代码有什么问题?
有问题,当myString不能知足时间格式要求的时候,会引起异常,建议使用DateTime.TryParse()
net的错误处理机制是:
采用try->catch->finally结构,
为何不提倡catch(Exception)
try..catch在出现异常的时候影响性能; 应该捕获更具体得异常,好比IOExeception,OutOfMemoryException等
catch(Exception e){throw e;}和catch(Exception e){throw;}的区别
将发生的异常对象抛出,另外一个只是抛出异常,并无抛出原异常对象)
error和exception区别:
error 表示恢复不是不可能但很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。
exception 表示一种设计或实现问题。也就是说,它表示若是程序运行正常,从不会发生的状况。
GET与POST的区别
在FORM提交的时候,若是不指定Method,则默认为GET请求,Form中提交的数据将会附加在url以后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
在使用 POST 方法的状况下,传输数据时不会将数据做为 URL 的一部分;它们会做为一个独立的实体来传输。所以,POST 方法更安全,你也能够用这个方法传输更多的数据。并且用 POST 传输的数据不必定要是文本,用 GET 方法传输的却必定要是文本。
(1)get是从服务器上获取数据,post是向服务器传送数据。
(1)在客户端,Get方式在经过URL提交数据,数据在URL中能够看到;POST方式,数据放置在HTML HEADER内提交。
(2)对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
(2)GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。因此,若是这些数据是中文数据并且是非敏感数据,那么使用 get;若是用户输入的数据不是中文字符并且包含敏感数据,那么仍是使用 post为好。
Bind和Eval函数的区别
绑定表达式
<%# Eval("字段名") %>
<%# Bind("字段名") %>
1 Eval 单向绑定:数据是只读的
Bind 双向绑定:数据能够更改,并返回服务器端,服务器能够处理更改后的数据,如存入数据库.
2.当对次表达式操做时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %>
3 绑定控件的属性时要用Bind,而Eval则是其它一些。
例如:<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' />
例如:<td><%# Eval("ProductID") %></td>
Response.Redirect和Server.Transfer
请求的过程:
1)浏览器aspx文件请求--->服务器执行--->遇到Response.Redirect语句->服务器发送Response.Redirect后面的地址给客户机端的浏览器--->浏览器请求执行新的地址
2)浏览器aspx文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件
能够见Server.Transfer比Response.Redirect少了一次服务器发送回来和客户端再请求的过程.
跳转对象:
1)Response.Redirect能够切换到任何存在的网页。
2)Server.Transfer只能切换到同目录或者子目录的网页.
数据保密:
一、Response.Redirect后地址会变成跳转后的页面地址。
二、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具备数据保密功能。
传递的数据量(网址后附带的参数):
一、Response.Redirect可以传递的数据以2KB(也就是地址栏中地址的最大的长度)为限。
二、传递的数据超过2KB时,务必使用Server.Transfer。
Server.UrlEncode、HttpUtility.UrlDecode的区别
Server.UrlEncode的编码方式是按照本地程序设置的编码方式进行编码的,而HttpUtility.UrlEncode是默认的按照.net的utf-8格式进行编码的。
Static 和 非Static的区别:
1、用Static声明的方法和变量,不须要实例化该类就调用;
2、Static的,就必定要用实例化的对象来调用,即用new来实例化。
举例说:
若是有一个类People,有一个Static的方法MiaoShu(), 调用方法就是 People.MisoShu()
有一个非Static的方法getName(), 调用方法就是 People p= new People(); p.getName();
如何实现链接池
确保你每一次的链接使用相同的链接字符串(和链接池相同);只有链接字符串相同时链接池才会工做。若是链接字符串不相同,应用程序就不会使用链接池而是建立一个新的链接。
优势
使用链接池的最主要的优势是性能。建立一个新的数据库链接所耗费的时间主要取决于网络的速度以及应用程序和数据库服务器的(网络)距离,并且这个过程一般是一个很耗时的过程。而采用数据库链接池后,数据库链接请求能够直接经过链接池知足而不须要为该请求从新链接、认证到数据库服务器,这样就节省了时间。
缺点
数据库链接池中可能存在着多个没有被使用的链接一直链接着数据库(这意味着资源的浪费)。
技巧和提示
1. 当你须要数据库链接时才去建立链接池,而不是提早创建。一旦你使用完链接当即关闭它,不要等到垃圾收集器来处理它。
2. 在关闭数据库链接前确保关闭了全部用户定义的事务。
3. 不要关闭数据库中全部的链接,至少保证链接池中有一个链接可用。若是内存和其余资源是你必须首先考虑的问题,能够关闭全部的链接,而后在下一个请求到来时建立链接池。
链接池FAQ
1. 什么时候建立链接池?
当第一个链接请求到来时建立链接池;链接池的创建由数据库链接的链接字符创来决定。每个链接池都与一个不一样的链接字符串相关。当一个新的链接请求到来时若是链接字符串和链接池使用的字符串相同,就从链接池取出一个链接;若是不相同,就新建一个链接池。
2. 什么时候关闭链接池?
当链接池中的全部链接都已经关闭时关闭链接池。
3. 当链接池中的链接都已经用完,而有新的链接请求到来时会发生什么?
当链接池已经达到它的最大链接数目时,有新的链接请求到来时,新的链接请求将放置到链接队列中。当有链接释放给链接池时,链接池将新释放的链接分配给在队列中排队的链接请求。你能够调用close和dispose将链接归还给链接池。
4. 我应该如何容许链接池?
对于.NET应用程序而言,默认为容许链接池。(这意味着你能够没必要为这件事情作任何的事情)固然,若是你能够在SQLConnection对象的链接字符串中加进Pooling=true;确保你的应用程序容许链接池的使用。
5. 我应该如何禁止链接池?
ADO.NET默认为容许数据库链接池,若是你但愿禁止链接池,可使用以下的方式:
1) 使用SQLConnection对象时,往链接字符串加入以下内容:Pooling=False;
2) 使用OLEDBConnection对象时,往链接字符串加入以下内容:OLE DB Services=-4;
提升.NET的性能
1 使用异步方式调用Web服务和远程对象
只要有可能就要避免在请求的处理过程当中对Web服务和远程对象的同步调用,由于它占用的是的ASP.NET 线程池中的工做线程,这将直接影响Web服务器响应其它请求的能力。
2 使用适当的Caching策略来提升性能
3 判断字符串,不要用""比较。
//避免
if(strABC!=null && strABC!="")
{}
//推荐
if(!strABC.IsNullOrEmpty)
{}
4 页面优化
5 用完立刻关闭数据库链接
6 尽可能使用存储过程,并优化查询语句
7 只读数据访问用SqlDataReader,不要使用DataSet
……….
.UDP链接和TCP链接的异同
答:前者只管传,无论数据到不到,无须创建链接.后者保证传输的数据准确,需要连结.
请解释转发与跳转的区别
转发就是服务端的跳转A页面提交数据到B页面,B页面进行处理而后从服务端跳转到其它页面
跳转就是指客户端的跳转
简述你对XML Web Service的原理的认识?
答:利用SOAP(简单对象访问协议)在http上执行远程方法的调用,也可使用WSDL(Web服务描述语言)来
完成完整的描述Web服务,而后用UDDI注册各个服务提供商提供的服务,以便共享他们。
什么叫应用程序域?
答:应用程序域能够理解为一种轻量级进程。起到安全的做用。占用资源小。
CTS、CLS、CLR分别做何解释?
答:CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。
什么是受管制的代码?
答:unsafe:非托管代码。不通过CLR运行。
什么是强类型系统?
答:RTTI:类型识别系统。
什么是code-behind技术
codebehind是指代码和用户界面分开
aspx and cs
在.net中,配件的意思是?
答:程序集。(中间语言,源数据,资源,装配清单)
经常使用的调用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜单选项
net Remoting 的工做原理是什么?
答:服务器端向客户端发送一个进程编号,一个程序域编号,以肯定对象的位置。
O/R Mapping 的原理
答:利用反射,配置将对象和数据库表映射
remoting和webservice两项技术的理解以及实际中的应用。
答:WS主要是可利用HTTP,穿透防火墙。而Remoting能够利用TCP/IP,二进制传送提升效率。
out保留字怎么使用,何时使用
答:有时为了从一个函数中返回多个值,咱们须要使用out关键字,把输出值赋给经过引用传递给方法的变量(也就是参数)。但C#要求变量再被引用的前必须初始化。在调用该方法时,还须要添加out关键字
PDB是什么东西? 在调试中它应该放在哪里?
PDB是用于保存调试和项目状态信息的文件,在debug的时候将产生pdb文件,调试的时候应该放在和对应应用
程序集相同目录。
使用ASMX的XML Web服务与使用SOAP的.NET Remoting的区别?
Web服务使用的消息机制,而Remoting采用的RPC. Web Service能用于不一样平台,不一样语言,Remoting只适用
于.Net。效率上Remoting高于Xml Web Service
类型系统是由XMLSchema表示的吗?CLS是XMLSchema表示的吗?
不清楚
从概念上阐述前期绑定(early-binding)和后期绑定(late-binding)的区别?
这个就像是强弱类型的比较类似,前期绑定是在编译的时候就肯定了要绑定的数据,然后期绑定是在运行的时候
才填充数据。因此前期绑定若是失败,会在编译时报编译错误,然后期绑定失败只有在运行时的时候才发生
调用Assembly.Load算静态引用仍是动态引用?
动态
列举一下你所了解的XML技术及其应用
答:保存配置,站与站之间的交流,WEB SERVICE。以及与数据库的数据交互等地方都要用它.
7.如何理解委托?
答:
至关于函数指针,定义了委托就能够在不调用原方法名称的状况下调用那个方法.
委托具备如下特色:
委托相似于 C++ 函数指针,但它是类型安全的。
委托容许将方法做为参数进行传递。
委托可用于定义回调方法。
委托能够连接在一块儿;例如,能够对一个事件调用多个方法。
方法不须要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
C# 2.0 版引入了匿名方法的概念,此类方法容许将代码块做为参数传递,以代替单独定义的方法。
概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对
象。您可使用反射动态地建立类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。而后,
能够调用类型的方法或访问其字段和属性
序列化:序列化是将对象转换为容易传输的格式的过程。例如,能够序列化一个对象,而后使用 HTTP 通
过 Internet 在客户端和服务器之间传输该对象。在另外一端,反序列化将从该流从新构造对象。
11) XmlSerializer是如何工做的?使用这个类的进程须要什么ACL权限?
我只知道XmlSerializer是将对象的属性和字段进行序列化和反序列化的,序列化成为xml数据,反序列化再将xml
转换成对象。应该至少须要ACL权限中的读权限.
23)XmlSerializer使用的针对属性的模式有什么好处?解决了什么问题?
只序列化有用的数据,而不是序列化整个对象。实现不必的数据冗余,和提高序列化时的性能。
26.根据委托(delegate)的知识,请完成如下用户控件中代码片断的填写:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//请在如下补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );
27.分析如下代码,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i= j=
答:i=13,j=10
28.SQLSERVER服务器中,给定表 table1 中有两个字段 ID、LastUpdateDate,ID表示更新的事务号,
LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句得到最后更新的事务号
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)
29.根据线程安全的相关知识,分析如下代码,当调用test方法时i>10时是否会引发死锁?并简要说明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不会发生死锁,(但有一点int是按值传递的,因此每次改变的都只是一个副本,所以不会出现死锁。但若是
把int换作一个object,那么死锁会发生)