C#面向对象整理

一、里氏转换

(1)子类可以赋值给父类:如果有一个地方需要一个父类作为参数,我们可以给一个子类代替。

(2)如果父类装的是子类对象,那么这个父类可以强转为子类对象。

二、值类型跟引用类型区别

1、在内存上存储的地方不一样。

  值类型的值是存储在内存的栈当中。
      引用类型的值是存储在内存的堆中。
2、传递的方式不一样。
  值类型我们称之为值传递,

  引用类型我们称之为引用传递。
3、我们学的值类型和引用类型:
  值类型:int、double、bool、char、decimal、struct、enum
  引用类型:string、自定义类、数组

三、委托和事件的关系

委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的指针。

委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。

事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove自己,不能赋值。事件只能+=、-=,不能= 。

四、ADO.NET中的五个主要对象

Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后       则不能再用。

Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在          Connection 对象上,也就是Command 对象是透过连接到数据源。

DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对       象上,并提供了许多配合DataSet 使用的功能。

DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只     是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对     象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet      包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据        库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读       取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传        回,故可以降低网络的负载。

ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。

五、列举ASP.NET 页面之间传递值的几种方式。

1.使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

4.Cookie传值

六、三层架构

通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

区分层次的目的即为了“高内聚,低耦合”的思想。

表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候的所见所得。

业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。

三层结构是N层结构的一种,一般来说,层次之间是向下依赖的,下层代码未确定其接口(契约)前,上层代码是无法开发的,下层代码接口(契约)的变化将使上层的代码一起变化。

优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点: 增加成本。

七、装箱和拆箱

1)Object是引用类型,但是它的子类Int32竟然不能去Object能去的(要求必须是引用类型)的地方,违反了继承的原则,所以需要把Int32装在Object中才能传递。

装箱:从值类型接口转换到引用类型。

拆箱:从引用类型转换到值类型。

     object obj = null;//引用类型

        obj = 1;//装箱,boxing。把值类型包装为引用类型。

        int i1 = (int)obj;//拆箱。unboxing 

2)下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的

int i=10;

object obj = i;

int j = obj; 

分析:在inboxing(装箱)时是不需要显式的类型转换的,不过unboxing(拆箱)需要显式的类型转换,所以第三行代码应该改为:

3 int j = (int)obj;

要掌握装箱与拆箱,就必须了解CTS及它的特点:

NET重要技术和基础之一的CTS(Common Type System)。CTS是为了实现在应用程序声明和使用这些类型时必须遵循的规则而存在的通用类型系统。.Net将整个系统的类型分成两大类 :值类型和引用类型。

CTS中的所有东西都是对象;所有的对象都源自一个基类——System.Object类型。值类型的一个最大的特点是它们不能为null,值类型的变量总有一个值。为了解决值类型不可以为null,引用类型可以为null的问题,微软在.Net中引入了装箱和拆箱:装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱。

object.ReferenceEquals();//用来判断两个对象是否是同一个对象

Console.WriteLine(object.ReferenceEquals(3,3));//因为两个3被装到了两个箱子中,所以是false。

八、堆和栈的区别?

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。

堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。

九、接口和类有什么异同

不同点:

  不能直接实例化接口。

  接口不包含方法的实现。

  接口可以多继承,类只能单继承。

  类定义可在不同的源文件之间进行拆分。

相同点:

  接口、类和结构都可以从多个接口继承。

  接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

  接口和类都可以包含事件、索引器、方法和属性。

时间: 2024-11-03 22:13:54

C#面向对象整理的相关文章

JS面向对象整理

有次面试的时候,面试官让我谈谈对面向对象的理解,让我一下蒙了,竟然不知道从哪里说起?自己都是在看完视频后,直接用面向对象写东西,也没有好好梳理,导致自己只会简单的用一下,却不会说.于是我就翻了翻<JavaScript高级程序设计>,对其进行整理了一下. 1.什么是对象 在ECMAScript中,对象就是一堆无序属性的集合,这些属性可以是基本值,也可以是别的对象和函数.所以我们也可以吧对象当成一组名值对,一个属性名对应一个值,值可以是数据或方法. 2.创建一个对象 (1)创建一个最简单的对象是通

javascript 面向对象整理

整理一下js面向对象中的封装和继承. 1.封装 js中封装有很多种实现方式,这里列出常用的几种. 1.1 原始模式生成对象 直接将我们的成员写入对象中,用函数返回. 缺点:很难看出是一个模式出来的实例. 代码: function Stu(name, score) { return { name: name, score: score } } var stu1 = Stu("张三", 80); var stu2 = Stu("李四", 90); console.log

笔记之_Java面向对象整理

现实生活中 先有对象 后有类 在程序中 先定义类 再根据类生成对象 什么是对象 现实中 看得见摸得着的所有实体都称为对象 什么是类 类是一组具有相同特征,相似行为的对象的集合 类是模子,对象是根据模子产生的实例 实例:内存中得以保存 现实:1.找对象2.抽离特征得到类 程序:1.根据现实得到的类创建类文件2.创建类对象 类中直接定义的变量:描述特征 1.变量作用域已到极致(全局变量) 2.成员变量 3.属性 类:相当于一个模板空间 只要有new出现就是实例化对象,强制开辟空间 访问修饰符 a)

python 面向对象整理 --------1.类和实例的属性

1.类的属性: # /usr/bin/env # coding = utf-8 class Chinese: #类的属性在这 country = 'China' def __init__(self, name): #实例的属性在这 self.name = name def play_ball(self, ball): print('%s正在打%s' % (self.name, ball)) #查看属性 print(Chinese.country) #修改属性 Chinese.country='J

python 面向对象整理 --------2.类的继承

1.类的继承: #/usr/bin/env #coding = utf-8 class animal(): def __init__(self,name): self.name=name def eat(self): print("%s eat food!" %self.name) class cat(animal): def cry(self): print("%s miaomiao jiao" %self.name) class dog(animal): def

python 面向对象整理 --------3.面向对象进阶--类的特殊成员

上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用.无论人或事物往往都有不按套路出牌的情况,Python的类成员也是如此,存在着一些具有特殊含义的成员,详情如下: 1. __doc__ 表示类的描述信息 class Foo: """ 描述类信息,这是用于看片的神奇 """ def func(self): pass print Fo

Java学习笔记----面对对象

最近开始着手整理自己学习的东西,把面向对象整理出来 什么是面向对象? 起初,"面向对象"是专指在程序设计中采用封装.继承.多态等设计方法. 面向对象的思想已经涉及到软件开发的各个方面.如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design).以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming). 什么是多态? 在面向对象语言中,接口的多种不同的实

seven day--面向对象及模块

复习 类 对象 实例化过程: 组合: super 派生prop 多态:建立一个父类,让所有传递的数据类型都继承这个父类. 学习方法: xy rz 时间1.画知识的思维导图:思维导图一定要画! python:基础数据类型 文件处理 函数 模块 面向对象 整理:时间分片 1 # 面向对象 2 # 类 实例化 对象/实例 3 # 什么是类? 拥有相同属性和方法的一类事物 4 # 什么是对象? 类的一个实际表现,给类中的属性填上具体的值,能够使用类中的方法 5 # 实例化的过程中做了那些事儿? 6 #

面向对象基本概念整理

1.基本概念: 1.1 类与对象的初探 要我说,无论是面向过程的语言也好,面向对象的语言也罢,我首先要给他讲的都是类和对象!--------“这个世界是由什么组成的?”这个问题如果 让不同的人来回答会得到不同的答案.如果是一个化学家,他也许会告诉你“还用问嘛?这个世界是由分子.原子.离子等等的化学物质组成的”.如果是一个画家 呢?他也许会告诉你,“这个世界是由不同的颜色所组成的”.……呵呵,众说纷纭吧!但如果让一个分类学家来考虑问题就有趣的多了,他会告诉你“这个世界是 由不同类型的物与事所构成的