3.3 对象的生命周期

  在上一节中声明了类并说明了类成员,这些类成员包括字段、方法、事件、构造函数以及析构函数。类是对象的设计图(也称为模板),类用于描述对象。在创建对象后,对象就开始了其生命周期,只有在生命周期内的对象才能够被使用,否则无法使用相应的对象。

3.3.1 类成员的访问
  类声明的方法是以class关键字开头,后面紧接着类名字,并以“{”“}”大括号包裹住类成员,示例代码如下所示。
访问权限 class 类名称
{
类成员
}
  例如在3.2.2中创建了一个Animal类,其中类名称就是Animal。在实例化一个对象之后,在主程序或其他代码段中,需要对实例化的对象进行访问,即需要对类成员的访问。访问类成员的方法就是在对象后使用“.”号,并通过Visual Studio 2008智能提示选择相应的类成员,示例代码如下所示。
+展开
-C#
using System;
using System.Collections.Generic;
using System.Linq;//使用LINQ命名空间
using System.Text;//使用文本命名空间
namespace MyClass
{
    public class Animal//创建一个类
    {
        string type;//声明了类成员string type
        public void SetType(string type)//声明了类方法
        {
            this.type = type;//字段赋值
        }
    }
    class Program//主程序类
    {
        static void Main(string[] args)//程序入口方法
        {
            Animal bird = new Animal(); //创建了一个bird对象
            bird.SetType("bird"); //引用了一个对象的成员
        }
    }
}

  上述代码中,创建了一个公共类Animal,并创建了类成员字段type和方法SetType。在主函数中,创建了一个Animal对象bird,并通过“.”号访问了类成员SetType方法。在访问类或类成员时,可以通过关键字来限制类或类成员的访问权限,以便只有该类的派生类才能访问或者使用,同时也能够限制类成员的权限,提高类成员的安全性。这些关键字包括public、private、protected和internal。

1.public共有权限
  public字段具有最高访问级别,任何它的对象或者其他的类都能对public关键字所修饰的类或类成员进行访问,示例代码如下所示。
+展开
-C#
    public class Animal//共有的类
    {
        public string type;//共有的字段
        public void SetType(string type)//共有的方法
        {
            this.type = type;//赋值共有字段
        }
    }


2.private私有权限
  private字段具有最低的访问级别,它能够保证类和类成员的安全,却限制了其他类或对象对它的访问。私有成员只有在声明他们的类之后才能访问,示例代码如下所示。
+展开
-C#
    public class Animal
    {
        private int age;//私有成员
        string type;//默认的私有成员
        public void SetType(string type)
        {
            this.type = type;//赋值私有成员
        }
    }


3.protected保护权限
  protected字段具有保护类中字段的功能,能够保证类和类成员的安全性,也能够限制其他类或对象对它的访问。但是与private不同的是,protected能够在类和类的的派生类中使用,比private具有更高的访问级别,又比public拥有更低的访问级别,保证了类的安全性,示例代码如下所示。
+展开
-C#
    public class Animal
    {
        protected string str;//受保护的成员
    }


4.internal程序集保护权限
  internal字段修饰的类或类成员只有在同一程序集的文件中内部类型或成员才可以访问,示例代码如下所示。
+展开
-C#
    public class Animal
    {
        internal string str;//受保护的程序集内的成员
    }

  这种程序集的文件中内部类型或成员才可以访问的修饰符通常是基于组件开发的,因为它能够使一组组件能够以私有方式进行合作,保证了组件的安全性。通常情况下,ASP.NET中页面控件都是通过内部组件方式进行合作。另一方面,这些访问权限修饰符还能够组合使用,例如protected internal就可以进行组合使用,组合使用所修饰的对象只有该类和该类派生的类的成员才可以访问。

3.3.2 类的类型
  每一个类的对象都是独立的对象,对象与对象之间有共同的属性,但是对象与对象之间不存在联系,虽然很多情况下类也可以引用类,示例代码如下所示。
+展开
-C#
    public class Animal创建类
    {
        public string type;//创建字符串型共有变量
    }
    class Program//主程序类
    {
        static void Main(string[] args)//程序入口方法
        {
            Animal bird = new Animal(); //bird对象
            bird.type = "bird";//初始化字段
            Animal cat = new Animal();//cat对象
            cat.type = "cat";//初始化字段
        }
    }

  上述代码创建了两个对象,一个对象为bird,另一个为cat对象。在初始化类成员时,为不同的对象的类成员赋了不同值,虽然这些类成员的名称相同,但是“.”号说明了该成员所在的对象是不同的。另外,由于类是引用类型,所以类的对象之间可以互相赋值,示例代码如下所示。
+展开
-C#
            Animal newbird = new Animal();//创建对象
            newbird = bird;//对象之间互相赋值

  上述代码将对象newbird初始化后并通过bird赋值,所以对象newbird中的type的值等于对象bird中的type值,因为newbird和bird都是引用的同一个对象。

3.3.3 .NET的垃圾回收机制
  当创建一个对象,.NET对该对象初始化并在内存相应位置存储,当一个对象执行析构函数时,该对象被销毁并释放相关资源。在C++中,使用析构函数能够让开发人员显式的释放资源。而在.NET中,由于使用了垃圾回收机制(GC)从而导致开发人员无法控制析构函数是何时被运行的。

  垃圾回收机制监视对象的生存周期,当一个对象没有被任何应用程序引用时,垃圾回收器就释放对象所占的内存以及资源。在基于.NET Framework编程时,开发人员无需像C++中显式的释放对象的资源也无需关心对象所占用的内存,因为.NET Framework的垃圾回收器能够监视对象并在相应的时候释放对象的资源。

  垃圾回收机器没有固定的工作模式。它的工作间隔是不可预期的,一般情况下,当应用程序占用的内存不足的时候会启用垃圾回收器释放未被引用的对象的资源。在应用程序使用复杂并昂贵的外部资源的时候,.NET机制提供接口能够让开发人员实现垃圾回收,以及资源释放机制,通过实现来自IDisposable接口的Dispost方法可以完成显式的资源释放。

  在ASP.NET或者Win Form开发中,显式的使用Dispost方法能够提高应用程序的性能。同样,析构函数也是一种清理资源的方法,在对象析构时,可以用Dispose对对象的资源,以及连接信息进行清空从而对对象进行释放。

加支付宝好友偷能量挖...


评论(0)网络
阅读(141)喜欢(0)Asp.Net/C#/WCF