C#避免在泛型类型中声明静态成员

在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList<T>中的静态成员理解成MyList<int>和MyList<string>共有的成员。

复制代码
class MyList
{
    public static int Count { get; set; }
    public MyList()
    {
        Count++;
    }
}
static void Main(string[] args)
{
    MyList list1 = new MyList();
    MyList list2 = new MyList();
    Console.WriteLine(MyList.Count);
    Console.ReadKey();
}
复制代码

运行结果:

若果换成泛型:

复制代码
class MyList<T>
{
    public static int Count { get; set; }
    public MyList()
    {
        Count++;
    }
}
static void Main(string[] args)
{
    MyList<int> list1 = new MyList<int>();
    MyList<int> list2 = new MyList<int>();
    MyList<string> list3 = new MyList<string>();
    Console.WriteLine(MyList<int>.Count);
    Console.WriteLine(MyList<string>.Count);
    Console.ReadKey();
}
复制代码

运行结果:

实际上,随着你为T指定不同的数据类型,MyList<T>相应地也变成不同的数据类型,它们之间是不共享静态成员的。

若T所指定的数据类型一致,那么两个泛型对象之间还是可以共享静态成员的,如上文中的list1和list2。但是为了避免因此引起的混淆,仍旧建议在实际编码过程中,尽量避免声明泛型类型的静态成员。

非泛型类型中静态泛型方法看起来很接近该例子,但是,非泛型中的泛型方法并不会在运行时的本地代码中生成不同的类型。

如下:

复制代码
class MyList
{
    static int Count;
    public static int Func<T>()
    {
        return Count++;
    }
}
static void Main(string[] args)
{
    Console.WriteLine(MyList.Func<int>());
    Console.WriteLine(MyList.Func<int>());
    Console.WriteLine(MyList.Func<string>());
    Console.ReadKey();
}
复制代码

运行结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值