当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > c#重点知识详解(四)

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 c#重点知识详解(四)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 39 ::
收藏到网摘: n/a

第四章:C# 中的加框与去框 C# 运行时中有两种类型:引用类型(reference)(在 C# 中用类声明)和值类型(value)(在 C# 中用结构声明)。引用和值类型在几个重要方面有所不同。值类型“感觉上”象一个数据。它包括预定义数值类型(如int、bool)以及用户定义的类型(circle、Point等)。如上文所述,值类型的变量是实际的值,所以在您使用变量时,通常处理的是实际的值。 1>:首先,让我们来看一看值类型(value)(在 C# 中用结构声明)。 对于任何类型的非框机构都又如下的形。 //------------------------------------- struct T_Point { T x,y; T_Point(T x,y) { this.x=x; this.y=y } } //------------------------------------- sample: class test{ struct Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } public static void Main() { Point p = new Point(10, 10); object f = p; p.x = 20; Console.Write(((Point)f).x); Console.Write(p.x); } } 让我么来看一看最后的结果是什么?结果是10,20.在第二次指定变量后,两个独立的变量包含相同的值。 修改 p 的值不会改变 f 的值. 2>:引用类型用于所有不能用作值类型的对象。引用类型的变量指向堆中对象的实例。这意味着在将一个变量指定 给另一个变量时,只是指定了引用,而不是值。 对于任何类型的框类都又如下的形。 //------------------------------------------------------ class T_Point { T x,y; T_Point(T x,y) { this.x=x; this.y=y } } //-------------------------------------------------------- class test{ class Point { public int x, y; public Point(int x, int y) { this.x = x; this.y = y; } } public static void Main() { Point p = new Point(10, 10); object f = p; p.x = 20; Console.Write(((Point)f).x); Console.Write(p.x); } } 让我么来看一看最后的结果是什么?很奇怪吗,结果是20,20.在第二次指定变量后,p 和 f 指向同一对象。这意味着修改 p 的名称也将改变 f 的名称,因为它们引用同一实例。修改类值的成员称为“变更者”,而不具有任何变更者的类称为不可变类。不可变类的存在可以使类的行为类似于值类,但不能写入为值类。 在c#语言中同时使用引用和值两种类型是很重要的。值类型轻便高效,而引用类型适用于面向对象的开发。但是,尽管我们有两了种类型,但有时我们需要的是更为简单的模型,使用单一的、能够囊括所有可能值的类型。这样一个通用基类能够调用任何值的虚函数。写入能够存储任何值的集合类。为实现这一目的,c#语言运行时采用一种方法让值类型在需要时转化为引用类型,即通过称为加框的进程。被加框的类型是通用基类,可以被各种类型的对象引用。 解框 int i = 123; object k = i;// 将 int i 加框到对象 k 中 int j=(int)k; // 解框 k 到 value2 当赋值给 k 时,作为赋值的一部分,C# 编译器将创建足够容纳堆中 int 的引用类型包装,将值复制到该加框,然后将加框标记为实际类型,以便运行时了解加框的类型。要从加框中取值,必须使用强制类型装换来指定加框的类型(对象能够保留任何类型)。在执行过程中,运行时将检查对象变量引用的类型是否为强制类型转换 中指定的类型。如果类型正确,值将从加框中复制回值类型变量。如果类型不正确,将导致异常。请注意解除加框过程中不会进行其他转换;类型必须完全匹配。 请注意以下代码: long i = 123; object k = i;// 将 long i 加框到对象 k 中 ulong j=(ulong)k; #error 由于加框类型于解框类型的不同将出错。如果认为像c++语言一样下面的操作将正确那也是不对的。 long i = 123; object k = i; int j=(int)k; #error 最后总结一下加框和解框。加框和解框使编写和使用具有通用对象参数的函数变得简单而直接。