C# 基础-CLR-从“类”说开来【1】
类 (class) 是最基础的 C# 类型。类是一个数据结构,将状态(字段)和操作(方法和其他函数成员)组合在一个单元中。类为动态创建的类实例 (instance) 提供了定义,实例也称为对象 (object)。类支持继承 (inheritance) 和多态性(polymorphism),这是派生类 (derived class) 可用来扩展和专用化基类 (base class) 的机制。类的实例使用 new 运算符创建,该运算符为新的实例分配内存、调用构造函数初始化该实例,并返回对该实例的引用。当不再使用对象时,该对象占用的内存将自动收回。在 C# 中,没有必要也不可能显式释放分配给对象的内存。
成员 | 说明 |
常量 | 与类关联的常量值 |
字段 | 类的变量 |
方法 | 类可执行的计算和操作 |
属性 | 与读写类的命名属性相关联的操作 |
索引器 | 与以数组方式索引类的实例相关联的操作 |
事件 | 可由类生成的通知 |
运算符 | 类所支持的转换和表达式运算符 |
构造函数 | 初始化类的实例或类本身所需的操作 |
析构函数 | 在永久丢弃类的实例之前执行的操作 |
类型 | 类所声明的嵌套类型 |
看下面例子:
{ // 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 | 访问仅限于此类 |
静态类
- 静态类必须直接从System.Object派生,从其他任何基类派生都没有任何意义
- 静态类不能实现任何接口,这是因为只有使用了类的一个实例,才可以调用类的接口方法
- 静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都将导致编译错误
- 静态类不能作为字段、方法参数或者局部变量使用,这些玩意都是实例的变量,编译器会报错
{
/// <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);
}
}
下面再来说下Monostate 模式
public class SayHello { private string helloString = "hello wordh"; public SayHello(string message) { this.helloString = message; } public string HelloString { get { return helloString; } set { this.helloString = value; } } } public class MonoState { private static SayHello Hello; public MonoState() { Hello = new SayHello("Hello Word"); } public SayHello Say { get { return Hello; } set { Hello = value; } } }
mian函数里面的内容
Monostate是另一种获得“系统某个类别对象都表现为一个对象”的实现方式,Singleton模式重在通过保证系统中只有唯一实例,而Monostate模式重在保证唯一状态, 当然Singleton模式更多的是用来 保证唯一实例。Monostate模式更多关注的是行为,即行为上的一致;Singleton模式更多关注的是结构,强制结构上的单一,仅产生唯一实例.关于设计模式方面内容以后有机会再详细讲,再回到类的成员上来。
常量和字段
CLR术语 | C#术语 | 说明 |
Static | static | 类状态的一部分,而不是实例状态的一部分 |
InitOnly | readonly | 只能由构造器方法中的代码写入 |
Volatile | volatile | 编译器,CLR或硬件不会执行一些“线程不安全”的优化措施。 |
说明:本文以“现状”提供且没有任何担保,同时也没有授予任何权利。 | This posting is provided "AS IS" with no warranties, and confers no rights.
珍爱生命,Leave here!