什么是面向对象javascript
面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP;java
通俗的解释就是万物皆对象,把全部的事物都看做一个个能够独立的对象(单元),它们能够本身完成本身的功能,而不是像C那样分红一个个函数;c++
如今纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的。程序员
阐述面向接口、面向对象、面向方面编程的区别web
面向对象很差解释,能够理解为以一切元素都是对象,在设计时以对象为单位,考虑它的属性及方法。设计中采用了封装、继承、抽象的手法正则表达式
面向接口自己就是面向对象的,无所谓区别,只不过面向接口的好处是耦合性低数据库
面向方面Aspect-Oriented Programming (AOP)就是大名鼎鼎的AOP。其实有点象struts里的拦截。编程
举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。c#
为了完成上述并发访问同一资源的功能,须要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就当即解锁unLocked,再供其它访问类访问。数组
面向对象的思想主要包括什么?
继承:子类拥有父类的全部数据和操做。
封装:用抽象的数据类型将数据和基于数据的操做封装在一块儿,数据被保护在抽象数据类型内。
多态:一个程序中同名的不一样方法共存的状况。有两种形式的多态–重载与重写。
抽象类是否能够继承实体类?
抽象类能够继承实体类,可是有个条件,条件是,实体类必需要有明确的构造函数。
当类T只声明了私有实例构造函数时,则在T的程序文本外部,是否能够从T派生出新的类,是否能够直接建立T的任何实例。
不能够,不能够
C#中有没有静态构造函数,若是有是作什么用的?
有. 静态构造函数用于初始化类。在建立第一个实例或引用任何静态成员以前,将自动调用静态构造函数来初始化类。静态构造函数既没有访问修饰符,也没有参数。在建立第一个实例或引用任何静态成员以前,将自动调用静态构造函数来初始化类。没法直接调用静态构造函数。在程序中,用户没法控制什么时候执行静态构造函数。静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。
什么是.net?
.net是一种平台和框架, .net 不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个总体框架
请以图示方式解释.net framework?
程序集与命名空间有什么不一样?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其余某个应用程序中重用时,能够下降复杂性。
程序集是重用代码的一种方式验证控件
不一样: 能够将相同命名空间中的类部署到不一样的程序集中,也能够命名空间中的类部署到一个程序集中
什么是WEB控件?使用WEB控件有那些优点?
WEB控件是能拖放在WEB页面上的控件
WEB控件分为:内部控件, 列表控件, 复杂控件,
•WEB控件优点:
l Web 控件是对象,与对象同样,Web 控件拥有方法和属性,而且响应事件
l 一旦将 Web 控件包括在 Web 页中,就能够设置其属性并调用其方法
l 能够为 Web 控件编写服务器端代码以响应在客户端上发生的事件
ASP.NET中共有几种类型的控件?各有什么区别?
WEB控件分为:内部控件, 列表控件, 复杂控件, 验证控件
内部控件:内部控件的使用方法与 HTML 控件相同,它们映射到 HTML 元素并经过使用 runat = "server" 属性在服务器上执行
列表控件:用于在 Web 页中建立数据列表
复杂控件:当但愿控件拥有复杂的功能或使用 HTML 元素没法建立的功能丰富的用户界面时,可使用复杂控件
验证控件:输入控件的数据须要进行准确性和取值范围方面的检查
WEB控件能够激发服务端事件,请谈谈服务端事件是怎么发生并解释其原理?自动传回是什么?为何要使用自动传回。
因为ASP。NET是Web页面和服务端分离的,所以要产生了服务端事件.
使用_doPostBack函数可以自动地把客户端的javascript事件转变为一个服务器端的事件,Asp.net框架自动为咱们处理有关的细节简化工做。
使用自动传回的特性:在检测到一个特定用户动做时,自动传回可以将这个页面传回服务器以处理事件.
在web控件发生事件时,客户端采用提交的形式将数据交回服务端,服务端先调用Page_Load事件,而后根据传回的状态信息自动调用服务端事件自动传回是当咱们在点击客户端控件时,采用提交表单的形式将数据直接传回到务端。只有经过自动传回才能实现服务端事件的机制,若是没有自动回传机制就只能调用客户端事件,而不能调用服务端事件
请解释ASP.NET中以什么方式进行数据验证。
Aps.net 中有非空验证,比较验证,取值范围验证,正则表达式验证及客户自定义验证五大控件,另还有一个集中验证信息处理控件
什么是ASP.Net中的用户控件
用户控件是可以在其中放置标记和 Web 服务器控件的容器。而后,能够将用户控件做为一个单元对待,为其定义属性和方法。
用户控件以。ascx为扩展名,能够拖到不一样的页面中调用,以节省代码。好比登录可能在多个页面上有,就能够作成用户控件,可是有一个问题就是用户控件拖到不一样级别的目录下后里面的图片等的相对路径会变得不许确,须要自已写方法调整。
问这样的问题,通常是迷惑你。由于新手仍是分不清楚用户控件和服务器控件(也称自定义控件),用户控件通常用在内容多为静态,或者少量会改变的状况下,用的比较大,相似ASP中的include。。可是功能要强大的多。
WEB控件及HTML服务端控件可否调用客户端方法?若是能,请解释如何调用?
能够调用
例如:<asp:TextBox id="TextBox1" onclick="clientfunction();" runat="server"></asp:TextBox>
<INPUT id="Button2" value="Button" name="Button2"runat="server" onclick="clientfunction();">
C#, Java 和 c++的特色,有什么相同的地方,不一样的地方, C#分别从c++和java中吸收了他们那些优势?
C#看起来与Java有着惊人的类似;它包括了诸如单一继承,界面,与Java几乎一样的语法,和编译成中间代码再运行的过程.可是C#与Java有着明显的不一样,它借鉴了Delphi的一个特色,与COM(组件对象模型)是直接集成。
微软c#语言定义主要是从C和C++继承而来的,并且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要普遍一些(好比说 structs),它还增长了本身新的特色(比方说源代码版本定义).
C#从Java继承而来的特色
类:在C#中类的声明与Java很类似。特色看起来与Java相比没有变化.
布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型.从布尔类型到其余类型没有直接的转换过程.布尔常量true和false是C#中的关键字.
错误处理:如Java中那样,经过抛出和捕捉异常对象来管理错误处理过程.
内存管理:由底层.NET框架进行自动内存垃圾回收.
C#从C和C++继承的特色
编译:程序直接编译成标准的二进制可执行形式.
结构体:一个C#的结构体与C++的结构体是类似的,由于它可以包含数据声明和方法.可是,不象C++,C#结构体与类是不一样的并且不支持继承.可是,与Java相同的是,一个结构体能够实现界面.
预编译:C#中存在预编译指令支持条件编译,警告,错误报告和编译行控制. #error
C#独有的特色
中间代码:微软在用户选择什么时候MSIL应该编译成机器码的时候是留了很大的余地.微软公司很当心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--若是不是大多数的话--程序员认为Java程序要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程序(指的是用 C#,Visual Basic,"Managed C++"--C++的一个符合CLS的版本--等语言编写的程序)将在性能上超过"解释性的"Java代码.固然,这一点还须要获得事实证实,由于C#和其余生成MSIL的编译器尚未发布.可是Java JIT编译器的广泛存在使得Java和C#在性能上相对相同.象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和 MSIL都是中间的汇编形式的语言,它们在运行时或其它的时候被编译成机器代码.
命名空间中的声明:当你建立一个程序的时候,你在一个命名空间里建立了一个或多个类.同在这个命名空间里(在类的外面)你还有可能声明界面,枚举类型和结构体.必须使用using关键字来引用其余命名空间的内容.
基本的数据类型:C#拥有比C,C++或者Java更普遍的数据类型.这些类型是bool, byte, ubyte, short, ushort, int, uint, long, ulong, float, double,和decimal.象Java同样,全部这些类型都有一个固定的大小.又象C和C++同样,每一个数据类型都有有符号和无符号两种类型.与 Java相同的是,一个字符变量包含的是一个16位的Unicode字符.C#新的数据类型是decimal数据类型,对于货币数据,它能存放28位10 进制数字.
两个基本类:一个名叫object的类是全部其余类的基类.而一个名叫string的类也象object同样是这个语言的一部分.做为语言的一部分存在乎味着编译器有可能使用它--不管什么时候你在程序中写入一句带引号的字符串,编译器会建立一个string对象来保存它.
参数传递:方法能够被声明接受可变数目的参数.缺省的参数传递方法是对基本数据类型进行值传递.ref关键字能够用来强迫一个变量经过引用传递,这使得一个变量能够接受一个返回值.out关键字也能声明引用传递过程,与ref不一样的地方是,它指明这个参数并不须要初始值.
与COM 的集成:C#对Windows程序最大的卖点可能就是它与COM的无缝集成了,COM就是微软的Win32组件技术.实际上,最终有可能在任何.NET语言里编写COM客户和服务器端.C#编写的类能够子类化一个以存在的COM组件;生成的类也能被做为一个COM组件使用,而后又能使用,比方说, JScript语言子类化它从而获得第三个COM组件.这种现象的结果是致使了一个运行环境的产生,在这个环境里的组件是网络服务,可用用任何.NET语言子类化.
索引下标:一个索引与属性除了不使用属性名来引用类成员而是用一个方括号中的数字来匿名引用(就象用数组下标同样)之外是类似的.
代理和反馈:一个代理对象包括了访问一个特定对象的特定方法所需的信息.只要把它当成一个聪明的方法指针就好了.代理对象能够被移动到另外一个地方,而后能够经过访问它来对已存在的方法进行类型安全的调用.一个反馈方法是代理的特例.event关键字用在将在事件发生的时候被当成代理调用的方法声明中.
在C#中,string str = null与string str = “”的区别。
string str = null是不给他分配内存空间,而string str = ""给它分配长度为空字符串的内存空
怎样理解静态变量?静态成员和非静态成员的区别?
静态变量属于类,而不属于对象;并对全部对象所享;静态成员在加类的时候就被加载。
静态成员和非静态成员的区别?
静态变量使用 static 修饰符进行声明,静态成员在加类的时候就被加载(在类被实例化时建立,哪一个对),经过类进行访问
不带有static 修饰符声明的变量称作非静态变量,在对象被实例化时建立,经过对象进行访问
一个类的全部实例的同一静态变量都是同一个值,同一个类的不一样实例的同一非静态变量能够是不一样的值
静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等
DataReader和DataSet的异同
DataReader和DataSet最大的区别在于,DataReader使用时始终占用SqlConnection,在线操做数据库,任何对SqlConnection的操做都会引起DataReader的异常,由于DataReader每次只在内存中加载一条数据,因此占用的内存是很小的,由于DataReader的特殊性和高性能。因此DataReader是只进的,你读了第一条后就不能再去读取第一条了。
DataSet则是将数据一次性加载在内存中。抛弃数据库链接,读取完毕即放弃数据库链接,由于DataSet将数据所有加载在内存中。因此比较消耗内存,可是确比DataReader要灵活,能够动态的添加行,列,数据。对数据库进行回传更新操做。
简述静态类和静态成员
静态类中的成员都必须是静态的。静态类无构造方法,而且是密封类没法被继承。
静态成员访问时只能经过类名来访问,不能经过对象访问(和JAVA有区别),this也没法访问静态成员。
描述接口的做用
充当类的功能界面,接口里的成员属于抽象描述,必须经过类的实现才能使用。如:某个项目有多个模块组成,每一个模块由一个开发者完成,开发者只需编写完模块功能实现后,留下的接口供其余人使用。其余人在程序中,使用接口时,只需知道接口的功能,不了解如何实现。
当功能模块没法知足须要或功能模块的需求变动时,程序员只需将该功能模块的实现代码进行修改和扩充,而其余调用接口的程序无须改动。接口的这种应用模式成为brige模式(即意图和实现分离)
接口反映了面向对象的多态特征,即经过相同方法获得不一样实现。接口也反映了面向对象的封装特征,使用者能够不清楚接口成员的实现细节。
注意:由于接口成员默认的访问权限是public,因此在实现接口时,类的成员必须为public,且方法名和参数必须一致。
描述抽象类
用abstract修饰的类。抽象类能够包含实现的成员。未实现的成员隐含的是virtual属性,子类实现时必须用override关键字。
请解释接口的显式实现有什么意义?
接口是其余类型为确保它们支持某些操做而实现的引用类型。接口从不直接建立并且没有实际的表示形式,其余类型必须转换为接口类型。一个接口定义一个协定。实现接口的类或结构必须遵照其协定。接口能够包含方法、属性、索引器和事件做为成员。
在项目中为何使用接口?接口的好处是什么?什么是面向接口开发?
接口只是一种约束。使用 interface 去定义某些特定的功能,为的是不要将代码写死在自定义类里,以便在系统开发、过后维护、功能扩充 上更有扩展性。
接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类能够增长本身的方法. 使用接口可使继承它的类: 命名统一/规范,易于维护。提供永远的接口。 当类增长时,现有接口方法可以知足继承类中的大多数方法,不必从新给新类设计一组方法,也节省了代码,提升了开发效率。
面向接口开发的好处有结构清晰,类间通讯简单易懂,扩展性好,提升复用性等等。
面向接口开发就是指面向抽象协议编程,实现者在实现时要严格按协议来办。
接口和类有什么异同。
不一样点:
一、不能直接实例化接口。
二、接口只包含方法或属性的声明,不包含方法的实现。
三、接口能够多继承,类只能单继承。
四、类有分部类的概念,定义可在不一样的源文件之间进行拆分。
五、表达的含义不一样,接口主要定义一种规范,统一调用方法,也就是规范类,约束类,类是方法功能的实现和集合
相同点:
一、接口、类和结构均可以从多个接口继承。
二、接口相似于抽象基类:继承接口的任何非抽象类型都必须实现接口的全部成员。
三、接口和类均可以包含事件、索引器、方法和属性。
您在什么状况下会用到虚方法或抽象类,接口?
若是某个方法可能性在派生类中会被重写。这时就将该方法写为虚方法。
抽象类:是一个类型,与派生类之间的关系是一个“ISA”的关系。用来作基类,抽象类不能建立对象,类中包括抽象方法和实例方法。
接口:是设计一个规范,描述了Can do ;与实现类之间是中”LINE A 的关系,C#中接口不能包含字段访问修饰符。
对比抽象基类和接口的使用
抽象类能有具体实现,而接口只定义行为规范,不能有具体实现。一个类只能继承一个父类,但能实现多个接口。
C#中的接口和抽象类有什么异同。你选择使用接口和抽象类的依据是什么?
一、继承:接口支持多继承;抽象类不能实现多继承。
二、表达的概念:接口用于规范,抽象类用于共性。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来讲,对于抽象类来讲,属于"是"的关系;而接口是定义行为规范,所以对于实现接口的子类来讲,相对于接口来讲,是"行为须要按照接口来完成"。
三、方法实现:对抽象类中的方法,便可以给出实现部分,也能够不给出;而接口的方法(抽象规则)都不能给出实现部分,接口中方法不能加修饰符。
四、子类重写:继承类对于二者所涉及方法的实现是不一样的。继承类对于抽象类所定义的抽象方法,能够不用重写,也就是说,能够延用抽象类的方法;而对于接口类所定义的方法或者属性来讲,在继承类中必须重写,给出相应的方法和属性实现。
五、新增方法的影响:在抽象类中,新增一个方法的话,继承类中能够不用做任何处理;而对于接口来讲,则须要修改继承类,提供新定义的方法。
六、接口能够做用于值类型(枚举能够实现接口)和引用类型;抽象类只能做用于引用类型。
七、接口不能包含字段和已实现的方法,接口只包含方法、属性、索引器、事件的签名;抽象类能够定义字段、属性、包含有实现的方法。
八、接口能够用于支持回调(CallBack);抽象类不能实现回调,由于继承不支持。
以下给出二者的简单对比表格。
如何选择:
一、看是否须要多继承,若是须要就只能使用接口
二、看你在累里定义的方法是否须要有实现的代码,若是要,就使用抽象类
三、使不一样的类型有共同的特性的时候使用接口,由于它支持多继承,只想从一个类型继承出不一样的行为的子类的时候使用抽象类,能够在基类里有代码实现。
从实现接口和现实抽象类的方法来看,接口是死的,抽象类是活的,固然实现接口的类是活的。
结构和类的区别
简单的说成class能够被实例化,属于引用类型struct属于值类型,
1)类型,空间分配。结构是值类型,是分配在内存的栈上的.类时引用类型,,是分配在内存的堆上的。结构实例化能够不用new,即便用new操做也不会在堆里分配内存。做参数是按值传递,类时引用传递,变量用完自动解除内存分配,类须要垃圾回收期
2)基类。结构继承自System.ValueType类,所以不具多态性。可是注意,System.ValueType是个引用类型。类继承自System.Object类;
3)职能。struct经常使用于存储数据;而class表现为行为
4) 结构没有类的特性,不支持继承。但能够实现接口。
5)结构没法声明无参的构造函数,但能够声明有参的构造函数
6)结构的实例成员不能直接赋初值,必须经过构造函数来赋值,但静态成员能够直接赋初值
7)无抽象结构,但有抽象类(abstract)
8)class 能够声明protected成员、virtual成员、sealed成员和override成员;而struct不能够,可是值得注意的是,struct 能够重载System.Object的3个虚方法,Equals()、ToString()和GetHashTable()。
接口与继承的区别?何时使用接口,何时使用继承?
(1) 接口定义一个类型须要实现的方法,属性,索引和事件,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来作,从而为组件提供多态能力。
(2) 继承经常使用于在一个现有父类的基础上的功能扩展,每每是咱们将几个类中相同的成员提取出来放在父类中实现,而后在各自的子类中加以继承。
(3) 接口能够实现多接口继承,而继承只能实现单继承。
(4) 实现继承可继承父类型的实现,因为接口中没有定义方法的实现,所以必须实现继承后该接口的全部方法。
(5) 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法致使用户必须为新方法添加实现。
(6) 当派生类和基类是is-a的关系是使用"继承",典型案例"苹果 is-a 水果",存在can-do的关系时使用"接口"
重载(Overload )和覆写(Override)的区别
简单的说,一个是同一个函数的几种形式,一个是重写父类函数,
重载:当类包含两个名称相同但签名不一样(方法名相同,参数列表不相同)的方法时发生方法重载。用方法重载来提供在语义上完成相同而功能不一样的方法。
覆写:在类的继承中使用,经过覆写子类方法能够改变父类虚方法的实现。
区别:
一、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。
二、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。
三、覆盖要求参数列表相同;重载要求参数列表不一样。
四、覆盖关系中,调用那个方法体,是根据对象的类型(对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体的。
<%# %> 和 <% %> 有什么区别?
<%# %>表示绑定的数据源
<% %>是服务器端代码块
值类型和引用类型的区别?写出C#的样例代码。
值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等
一、赋值方式:将一个值类型变量赋给另外一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不一样,引用类型变量的赋值只复制对象的引用,而不复制对象自己。
二、派生:值类型不可能派生出新的类型,全部的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也能够实现接口。
三、null:与引用类型不一样,值类型不可能包含 null 值。然而,可空类型功能容许将 null 赋给值类型。
四、每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举
结构分为如下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string
五、值类型存贮在栈中,而引用类型存贮在动态的堆中,栈是先进先出的有系统管理的空间,而堆是由应用程序控制的可随时申请和释放该空间,在Donnet中通常状况下有垃圾收集器处理,他们的不一样致使在编程上的不一样。
例:
"a=null"的意思是:a的引用置为空但此时StringBuilder的堆空间并无被释放,所以在此以后,输出b时,仍然能够输出mxh
输出结果:
mxh
mxh
请按任意键继续. . .
C#中的委托是什么?如何理解委托?
简单的说:委托是一种方法容器,里面能够装载若干个具备相同签名的方法引用地址,那么调用委托,就至关于同时调用了该容器内的全部方法。
委托能够看作一种新的对象类型,具备面向对象的特色,定义时可签名接收参数,委托实例化时,能够把方法名做为一个参数传递给委托对象,委托能够理解为指向函数的引用。生成的委托对象能够代理所传递的方法,能够接收方法的参数。也就是定义了委托,能够在不用调用原方法的状况下,调用那个方法
例:
委托相似于 C或 C++中的函数指针。但不一样的是委托是面向对象、类型安全的。
委托容许将方法做为参数进行传递。
委托可用于定义回调方法。
委托能够连接在一块儿;建立多个对象,使用“+=”累加到同一个委托对象上的引用上,例如,能够对一个事件调用多个方法。
方法不须要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
C# 2。0 版引入了匿名方法的概念,此类方法容许将代码块做为参数传递,以代替单独定义的方法。如:
结果:
事件信息:Text属性被更改了
事件发布者:Name类的对象
你输入的名字是:张三
请按任意键继续. . .
使用匿名方法,直接将方法体的代码和委托对象关联而不须要单独定义此方法
也能够用Lambda表达式把delegate隐藏