程序设计-ASP.NET基础知识(五)

区别类

程序设计-ASP.NET基础知识(五)

结构和类的区别

简单的说成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) 的区别

简单的说,一个是同一个函数的几种形式, 一个是重写父类函数,

重载:当类包含两个名称相同但签名不同 ( 方法名相同 , 参数列表不相同 ) 的方法时发生方法重载。用方法重载来提供在语义上完成相同而功能不同的方法。

覆写:在类的继承中使用,通过覆写子类方法可以改变父类虚方法的实现。

区别:

1 、方法的覆盖是子类和父类之间 的关系,是垂直关系;方法的重载是同一个类中方法之间 的关系,是水平关系。

2 、覆盖只能由一个方法 ,或只能由一对方法 产生关系;方法的重载是多个方法 之间的关系。

3 、覆盖要求参数列表相同 ;重载要求参数列表不 同。

4 、覆盖关系中,调用那个方法体,是根据对象的类型 (对象对应存储空间类型)来决定;重载关系,是根据调用时的实参表与形参表来选择方法体 的。

<%# %> 和 <% %> 有什么区别?

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

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

值类型和引用类型的区别?写出 C# 的样例代码。

值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等

1 、赋值方式:将一个值类型变量赋给另一个值类型变量时,将复制包含的值 。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对象的引用 ,而不复制对象本身。

2 、派生:值类型不可能派生 出新的类型,所有的值类型均隐式派生自 System.ValueType 。但与引用类型相同的是,结构也可以实现接口。

3 、 null :与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。

4 、每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

值类型主要由两类组成:结构、枚举

结构分为以下几类: Numeric (数值)类型、整型、浮点型、 decimal 、 bool 、用户定义的结构。

引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字: class 、 interface 、 delegate 、内置引用类型: object 、 string

5 、值类型存贮在 中,而引用类型存贮在动态的堆 中,栈是先进先出的有系统管理的空间,而堆是由应用程序控制的可随时申请和释放 该空间,在 Donnet 中一般情况下有垃圾收集器处理,他们的不同导致在编程上的不同。

例:

"a=null" 的意思是: a 的引用置为空但此时 StringBuilder 的堆空间并没有被释放,因此在此之后,输出 b 时,仍然可以输出 mxh

俊霖

发表评论

您必须