关于类成员变量的声明和实例化的时机
程序1:
namespace ClassMemberDeclaration
{
class Class1
{
Class2 class2 = new Class2();
//这是在声明成员对象的时候同时实例化。
public Class1()
{
//class2 = new Class2();
//这是在类定义的时候仅声明成员对象,而在新建类对象实例的时候,再对类内部的对象成员统一实例化。
class2.output();
}
}
}
程序2:
namespace ClassMemberDeclaration
{
class Class2
{
int b=22;
//这是 在声明成员变量的时候同时实例化(初始化)。
public Class2()
{
//b = 22;
//这是在成员变量定义的时候仅声明,而在新建类对象实例的时候,
//再通过类的构造函数对类内部的成员统一初始化。
}
public void output()
{
Console.WriteLine(b.ToString());
}
}
}
声明和实例化(初始化)是不同的动作,处于概念上的清晰,推荐把二者分开,看下面一段Visual Studio 2008自动生成的代码:
程序3:
namespace WebWFLib
{
partial class Workflow1
{
#region Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
[System.Diagnostics.DebuggerNonUserCode]
private void InitializeComponent()
{
this.CanModifyActivities = true;
this.codeDoDivision = new System.Workflow.Activities.CodeActivity();//实例化
this.sequenceActivity1 = new System.Workflow.Activities.SequenceActivity();//实例化
//
// codeDoDivision
//
this.codeDoDivision.Name = "codeDoDivision";
this.codeDoDivision.ExecuteCode += new System.EventHandler(this.codeDoDivision_ExecuteCode);
//
// sequenceActivity1
//
this.sequenceActivity1.Activities.Add(this.codeDoDivision);
this.sequenceActivity1.Name = "sequenceActivity1";
//
// Workflow1
//
this.Activities.Add(this.sequenceActivity1);
this.Name = "Workflow1";
this.CanModifyActivities = false;
}
#endregion
private CodeActivity codeDoDivision; //声明
private SequenceActivity sequenceActivity1; //声明
}
}
在微软自动生成的代码中,都是通过在类的构造函数中调用一个private void InitializeComponent()函数来对类的成员进行实例化(初始化),而在类中仅对成员进行声明,虽然在类定义声明变量的时候,可以在语法 上对其进行实例化,但这显然不是一种概念清晰的做法。类的所有成员实例都是在类的实例被创建时才被创建的,推荐在程序的书写上也体现出这种规则。
posted on 2008-03-27 16:30 smwikipedia 阅读(879) 评论(0) 编辑 收藏 举报