当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > DotNet慎用Shared方法

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 中的 DotNet慎用Shared方法


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


我们先来看一段代码,可以直接CP下来在VB.Net下调试查看结果
Namespace Test Public Class Father Friend Shared _x As Integer = 1 Public Sub New() End Sub End Class Public Class Child Inherits Father Public Sub New() End Sub End ClassEnd NamespacePrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f1 As New Father Dim c1 As New Child f1._x = 1 MessageBox.Show("Father Class 's Shared Attribues X Has Been Modify to:" + f1._x.ToString()) c1._x = 123 MessageBox.Show("Child Class 's Shared Attribues Has Been Modify to:" + c1._x.ToString()) MessageBox.Show("In The End Father Class 's Shared Attribues X Has Been Modify to:" + f1._x.ToString()) End Sub
在这里,父类的Shared属性会被子类影响,因为访问同一内存空间,在MSDN库对Shared是这么解释的
Shared 构造函数初始化类型的 Shared 变量;它们在程序开始执行后先于大多数类型成员引用运行。Shared 构造函数不重载实例构造函数,而且不能进行自身重载。
与实例构造函数不同,Shared 构造函数具有隐式 Public 访问,没有任何参数,而且不能调用其他构造函数。在 Shared 构造函数中的第一个语句之前,Shared 构造函数隐式地执行由类型中声明的 Shared 变量的变量初始值设定项指定的初始化。这对应于一个在进入构造函数后立即执行的赋值序列。变量初始值设定项按它们在类型声明中出现的文本顺序执行。

运行 Shared 构造函数的确切时间基本上是由实现决定的,但需要满足以下几个条件: Shared 构造函数在创建类型的任何实例之前运行。 Shared 构造函数在引用类型的共享成员之前运行。 Shared 构造函数在加载任何从类型派生的类型之前运行。 Shared 构造函数不会在单次程序执行过程中运行一次以上。
在 Shared 变量初始值设定项中避免循环引用,因为通常不可能确定包含这些引用的类的加载顺序。