Appearance
静态变量实例化
在不适合将构造函数公开的情况下,可以采用静态变量来实例化。不过因为变量无法管控,可能在某个不经意的地方被改变了值,静态变更的方式并 不推荐 使用在较大的系统中。有两种方式
- 带有 [Instance] 标注
- 名称为 instance 的属性(不区分大小写)
注意
- 变量的类型必须是当前类型
- 变是必须是public的
C#
[Service]
public class T1
{
/// <summary>
/// 名称为instance的静态变量
/// </summary>
public static T1 instance = new T1();
/// <summary>
/// 私有的构造函数
/// </summary>
private T1() { }
}
[Service]
public class T2
{
/// <summary>
/// 带有 [Instance] 标识
/// </summary>
[Instance]
public static T2 single= new T2();
/// <summary>
/// 私有的构造函数
/// </summary>
private T2() { }
}
[Service]
public class T3
{
/// <summary>
/// 带有 [Instance] 标识,并含有版本,当前版本2
/// </summary>
[Instance(2)]
public static T3 tcp = new T3("tcp");
/// <summary>
/// 带有 [Instance] 标识,并含有版本,当前版本1
/// </summary>
[Instance(1)]
public static T3 Udp = new T3("udp");
private T3(string protocol) { }
}另外,如果当前类型是泛型类,如果类型参数不同,版本可以相同
C#
[Service]
public class T4<T>
{
/// <summary>
/// 带有 [Instance] 标识,当前类型参数是string
/// </summary>
[Instance]
public static T4<string> stringInstance = new T4<string>();
/// <summary>
/// 带有 [Instance] 标识,当前类型参数是int
/// </summary>
[Instance]
public static T4<int> intInstance = new T4<int>();
private T4() { }
}注意
泛型类型如果采用静态变量实例化,不同的类型参数都要有自己的静态变量。例如,以上示例中,如果需要 T4<float> 类型时,因为找不到相应的实例化入口,将无法实例化。