欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net相关知识

程序员文章站 2022-05-06 10:25:58
1、简述 private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 在 ......

1、简述 private、 protected、 public、 internal 修饰符的访问权限。

  private :   私有成员在类的内部才可以访问。 

  protected : 保护成员,该类内部和继承类中可以访问。 

  public :    公共成员,完全公开,没有访问限制。 

  internal:   在同一命名空间内可以访问。

2、c#中的委托是什么?事件是不是一种委托?

  简单的说:委托是一种方法容器,里面可以装载若干个具有相同签名的方法引用地址,那么调用委托,就相当于同时调用了该容器内的所有方法。

  委托可以看做一种新的对象类型,具有面向对象的特点,定义时可签名接收参数,委托实例化时,可以把方法名作为一个参数传递给委托对象,

  委托可以理解为指向函数的引用。生成的委托对象可以代理所传递的方法,可以接收方法的参数。也就是定义了委托,可以在不用调用原方法的情况下,调用那个方法。

  委托可以把一个方法作为参数代入另一个方法。

  委托可以理解为指向一个函数的引用。

  委托是一种安全的函数指针,事件是一种消息机制,是一种特殊的委托。

3、override(重写)overload(重载)的区别

  重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。

  重写是进行基类中函数的重写,名称、参数和参数类型都相同,为了适应需要。

 4、c#中,string str = null 与 string str = “”的区别。 

  string str = null 是不给他分配内存空间,

  string str = "" 给它分配长度为空字符串的内存空间。

5、面向对象的语言具有________性、_________性、________

  封装、继承、多态。

  封装:每个对象都包含有它能进行操作的所有信息,这个特性称为封装。这样的方法包含在类中,通过类的实例来实现。       

       好处:

    a.良好的封装能够减少耦合(比如实现界面和逻辑分离)

    b.可以让类对外接口不变,内部可以实现*的修改

    c.类具有清晰的对外接口,使用者只需调用,无需关心内部

    d.因为封装的类功能相对独立,因此能更好的实现代码复用

    e.可保护代码不被无意中破坏,通过私有字段等实现内部。注意:这里的代码保护不是指代码本身的加密,而是对不想外部更改的代码通过私有实现。

    要点:

    1.封装,就是把一个对象所能操作的所有信息放在一起

    2.封装能减少耦合,保持统一的对外接口,内部修改不影响外部调用

 

  继承:

  (1) 当一个类a能够获取另一个类b中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。

  (2) 被继承的类b称为父类或基类,继承了父类的类a称为子类或派生类.

  缺点:

  缺点一:父类变化,子类不得不变;

  缺点二:继承破坏了包装,父类的细节暴露给了子类。

  要点:

  1:父类中的私有成员,派生类是绝不能访问;

  2:c#要求一个类只能有一个直接基类;

  3:被“sealed”关键字修饰的类将不能被继承;

  4:被“protected”修饰的成员或者数据可以直接被派生类访问,属于“可以在家族里分享的秘密”。

  5:善用“base”关键字,显示调用合适的自定义基类构造函数而不是使用默认构造函数。

  6:继承需要合理使用才能发挥最佳效果,一般情况下适用于“is a”关系,不适用“has a”关系。

 

  多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。这就是多态,这种特性称为多态性。

  多态的分类:多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

    编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

    运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。c#中运行时的多态性是通过覆写虚成员实现。

  要点:

  a.多态是面向对象的重要特性之一,指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

  b.多态分为两种:一种是编译时多态,使用重载实现;另一种是运行时多态,使用重写实现;

  c.重写有两种,一种使用override关键词,另一种使用new关键词

  d.new重写实际上是对父类方法的隐藏,被覆盖的父类方法可以调用得到。因此new可以重写(或说是隐藏)的父类方法不一定要定义为虚方法或抽象方法。只是如果父类方法  是虚方法或抽象方法时会覆盖父类方法,如果不是,则隐藏。

  e.重载和覆盖的发生条件:
  重载,必然发生在一个类中,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关
  重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
  覆盖,在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用new关键字 new 修饰 

  隐藏,在子类中可以通过new 隐藏父类的方法

  f.new覆盖与重写、重载的区别:

  当子类与父类的参数不同时

  当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载)

  当基类函数是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载;因为参数不同,所以不是重写)

  当子类与父类的参数相同时

  当基类函数不是虚函数时,基类函数将被隐藏。(因为子类和基类不在同一范围内,所以不是重载,因为基类不是虚函数,所以是隐藏不是重写)

  当基类函数是虚函数时,基类函数将被覆盖。(因为子类和基类不在同一范围内,所以不是重载)

 6、gc是什么为什么要有gc?

  gc是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: 

  system.gc()

  runtime.getruntime().gc()

7、c#中结构和类有什么异同?

  类是引用类型,可以继承类、接口和被继承,有默认的构造函数,有析构函数,可以使用abstractsealed,有protected修饰符,必须使用new初始化。

  结构是值类型,只能继承接口,不能被继承,没有默认的构造函数,可以创建,没有析构函数,不可以用abstractsealed,没有protected修饰符,可以不用new初始化。

8、抽象类(abstract class)和接口(interface)有什么异同?

  抽象类:

  (1) 抽象方法只作声明,而不包含实现,可以看成是没有实现体的虚方法

  (2) 抽象类不能被实例化

  (3) 抽象类可以但不是必须有抽象属性和抽象方法,但是一旦有了抽象方法,就一定要把这个类声明为抽象类

  (4) 具体派生类必须覆盖基类的抽象方法

  (5) 抽象派生类可以覆盖基类的抽象方法,也可以不覆盖。如果不覆盖,则其具体派生类必须覆盖它们。

  接口:

  (1) 接口不能被实例化

  (2) 接口只能包含方法声明

  (3) 接口的成员包括方法、属性、索引器、事件

  (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员。

  (5) 接口中的所有成员默认为public,因此接口中不能有private修饰符

  (6) 派生类必须实现接口的所有成员

  (7) 一个类可以直接实现多个接口,接口之间用逗号隔开

  (8) 一个接口可以有多个父接口,实现该接口的类必须实现所有父接口中的所有成员

  相同点:
  (1) 都可以被继承
  (2) 都不能被实例化
  (3) 都可以包含方法声明
  (4) 派生类必须实现未实现的方法
  区 别:
  (1) 抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、和方法声明,不能包含字段。
  (2) 抽象类是一个不完整的类,需要进一步细化,而接口是一个行为规范。微软的自定义接口总是后带able字段,证明其是表述一类“我能做。。。”
  (3) 接口可以被多重实现,抽象类只能被单一继承
  (4) 抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中
  (5) 抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
  (6) 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法
  (7) 接口可以用于支持回调,而继承并不具备这个特点
  (8) 抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
  (9) 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法

9、.net的错误处理机制是什么?

  try{可能要出错的代码}

  catch{扑捉到错误后的处理}

  finally{不论代码是否出错都要执行}

10、事务是什么?

  在许多大型、关键的应用程序中,计算机每秒钟都在执行大量的任务。更为经常的不是这些任务本身,而是将这些任务结合在一起完成一个业务要求,称为事务。

  当某一个任务失败时,就恢复到指定的恢复点,这个叫回滚。

11、什么是数据库事务

  (1) 事务的三个特性:一致性,原子性,隔离性

  (2) 几个sql语句,要么全部执行成功,要么全部执行失败,事务的三个操作:begincommitrollback

  (3) 取刚插入数据的id值,就要用事务来隔离。

12、数据库建立索引的优缺点

  优点:使用索引可以加快数据的查询速度

  缺点:由于数据插入过程中会建索引,所以会降低数据的插入,更新速度,索引还会占用磁盘空间。

13、接口是否可继承接口抽像类是否可实现(implements)接口抽像类是否可继承实体类(concrete class)?

  接口可以继承接口。抽像类可以实现(implements)接口,抽像类是否可继承实体类,但前提是实体类必须有明确的构造函数。

14、sleep()wait() 有什么区别?

  sleep()方法是将当前线程挂起指定的时间。

  wait()释放对象上的锁并阻塞当前线程,直到它重新获取该锁。

15、什么是.net?

     .net是一种平台和框架, .net 不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个整体框架

16、概述反射和序列化?

  反射:要给发射下一个定义还是比较难的。反射提供了封装程序集,模块和类型对象,可以用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取     类型,然后调用类型的方法或访问字段和属性。动态获取程序集信息

  序列化:将对象转换为另一种媒介传输的格式过程。如,序列化一个对象,用http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。

17、什么是虚函数?什么是抽像函数?

  虚函数:可由子类继承并重写的函数。抽像函数:规定其非虚子类必须实现的函数,必须被重写。

18、什么是xml

  xml即可扩展标记语言。extensible markup language.标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即  可以选择国际通用的标记语言,比如html,也可以使用象xml这样由相关人士*决定的标记语言,这就是语言的可扩展性。xml是从sgml中简化修改出来的。它主要用到的有  xmlxslxpath等。

19、xmlhtml 的主要区别

  1  xml是区分大小写字母的,html不区分。

  2  html中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略或者之类的结束标记。在xml中,绝对不能省略掉结束标记。

  3  xml中,拥有单个标记而没有匹配的结束标记的元素必须用一个 字符作为结尾。这样分析器就知道不用查找结束标记了。

  4  xml中,属性值必须分装在引号中。在html中,引号是可用可不用的。

  5  html中,可以拥有不带值的属性名。在xml中,所有的属性都必须带有相应的值。

20、errorexception有什么区别?

  error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

21、向服务器发送请求有几种方式?

  get,post

  get一般为链接方式,post一般为按钮方式。

22、<%# %>和<% %>的区别?

  <%# %>表示绑定的数据源

  <% %>是服务器端代码块

23、进程和线程分别该怎么理解?

  进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,

  线程的划分尺度要比进程要小,进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。

 24、如何处理几十万条并发数据?

  用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.

25、数组有没有length()这个方法? string有没有length()这个方法?

  数组没有length()这个方法,有length的属性。string有length()这个方法。
26、什么是父类引用指向子类对象
  意义可大了,打个简单点的比方。
  爸爸 王小二=new 大儿子();
  爸爸 王小二=new 小儿子();
  那我现在叫大儿子过来,王小二可以过来,我叫小儿子过来,王小二也可以过来方便吧。
  在做项目的时候, 爸爸 王小二; 这步是我写的;后面 王小二=new 小儿子();或者new 大儿子()不一定是我写,那我怎么知道他到底要的是大儿子还是小儿子,
  所有我声明他们爸爸的引用,你叫大儿子和小儿子都ok。 我要是写具体的 小儿子 王小二=new 小儿子(),不是把别人限定死了吗。
  就算那两步都是你自己写,我项目做完了,我如果要修改的话,那我至少声明的那部分可以不动了吧。也就是说扩展了程序的 移植性和可维护性。
27、udp连接和tcp连接的异同
  tcp---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个tcp连接,之后才能传输数据。tcp提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 
  udp---用户数据报协议,是一个简单的面向数据报的运输层协议。udp不提供可靠性,它只是把应用程序传给ip层的数据报发送出去,但是并不能保证它们能到达目的地。由于udp在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
28、