当前位置:编程学习 > C#/ASP.NET >>

C# 基础-CLR-从“类”说开来【1】

 

上篇谈了CLR支持的两种类型:reference-type 和value-type,这篇来详细谈谈类(class)。
 

  类(class) 是最基础的C# 类型。类是一个数据结构,将状态(字段)和操作(方法和其他函数成员)组合在一个单元中。类为动态创建的类实例(instance) 提供了定义,实例也称为对象(object)。类支持继承(inheritance) 和多态性(polymorphism),这是派生类(derived class) 可用来扩展和专用化基类(base class) 的机制。类的实例使用new运算符创建,该运算符为新的实例分配内存、调用构造函数初始化该实例,并返回对该实例的引用。当不再使用对象时,该对象占用的内存将自动收回。在C# 中,没有必要也不可能显式释放分配给对象的内存。

 
    类包可以包含一下成员:
    (静态成员(static member),或者是实例成员(instance member)。静态成员属于类,实例成员属于该类的实例)
 

成员

说明

常量

与类关联的常量值

字段

类的变量

方法

类可执行的计算和操作

属性

与读写类的命名属性相关联的操作

索引器

与以数组方式索引类的实例相关联的操作

事件

可由类生成的通知

运算符

类所支持的转换和表达式运算符

构造函数

初始化类的实例或类本身所需的操作

析构函数

在永久丢弃类的实例之前执行的操作

类型

类所声明的嵌套类型

 

 看下面例子:

public sealed class SomeType
{ // 1
// 嵌套类
private class SomeNestedType { } // 2
// 常量,只读字段,静态字段
private const Int32 c_SomeConstant = 1; // 3
private readonly String m_SomeReadOnlyField = "2"; // 4
private static Int32 s_SomeReadWriteField = 3; // 5
// 类型构造器
static SomeType() { } // 6
// 实例构造器
public SomeType() { } // 7
public SomeType(Int32 x) { } // 8
// 静态方法和类型方法
public static void Main() { } // 9
public String InstanceMethod() { return null; } // 10
// 实例属性
public Int32 SomeProp
{ // 11
get { return 0; } // 12
set { } // 13
}
// 有参索引器
public Int32 this[String s]
{ // 14
get { return 0; } // 15
set { } // 16
}
// 实例事件
public event EventHandler SomeEvent; // 17
}
    
类型成员的可访问性
 
CLR术语 C#术语 含义
public public

访问不受限制

Family or Assembly protected internal

访问仅限于此程序或从此类派生的类

Assembly internal

访问仅限于此程序

Family and Assembly 不支持  
Family     protected

访问仅限于此类或从此类派生的类

Private private

访问仅限于此类

     
 
 

静态类

 
static只能用于类,不能用于结构,因为CLR总是允许值类型实例化,无法阻止。
 
C#编译器对静态类型进行了如下的限制:
 
  • 静态类必须直接从System.Object派生,从其他任何基类派生都没有任何意义
  • 静态类不能实现任何接口,这是因为只有使用了类的一个实例,才可以调用类的接口方法
  • 静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都将导致编译错误
  • 静态类不能作为字段、方法参数或者局部变量使用,这些玩意都是实例的变量,编译器会报错
public static class MyStatic
{
/// <summary>
/// 静态字段
/// </summary>
private static string staticString = "Hello bangq";
/// <summary>
/// 静态属性
/// </summary>
public static string StaticString
{
        get { return staticString; }
        set { staticString = value; }
}
/// <summary>
/// 静态方法
/// </summary>
public static void SayHello()
{
    Console.WriteLine(staticString);
}
}
 
staticvoidMain(string[] args)
{
 
MyStatic.SayHello();//Hello bangq
 
MyStatic.StaticString = "你好 BangQ ";
 
Console.WriteLine(MyStatic.StaticString);//你好 BangQ
 
Console.ReadKey();
}
可以这样说,静态类是MonoState模式的一种体现。提到MonoState就不得不提Singleton(单例)模式。
 
 
classSingleton
{
    ///<summary>
    ///静态成员
    ///</summary>
    private static Singleton _instance = null;
    ///<summary>
    ///静态属性
    ///</summary>
   &nb
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,