Skip to content

静态变量实例化

在不适合将构造函数公开的情况下,可以采用静态变量来实例化。不过因为变量无法管控,可能在某个不经意的地方被改变了值,静态变更的方式并 不推荐 使用在较大的系统中。有两种方式

  1. 带有 [Instance] 标注
  2. 名称为 instance 的属性(不区分大小写)

注意

  1. 变量的类型必须是当前类型
  2. 变是必须是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> 类型时,因为找不到相应的实例化入口,将无法实例化。

沪ICP备2025119739号