C#避免在泛型类型中声明静态成员
2017-03-16 15:21
239 查看
在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList<T>中的静态成员理解成MyList<int>和MyList<string>共有的成员。
运行结果:
若果换成泛型:
运行结果:
实际上,随着你为T指定不同的数据类型,MyList<T>相应地也变成不同的数据类型,它们之间是不共享静态成员的。
若T所指定的数据类型一致,那么两个泛型对象之间还是可以共享静态成员的,如上文中的list1和list2。但是为了避免因此引起的混淆,仍旧建议在实际编码过程中,尽量避免声明泛型类型的静态成员。
非泛型类型中静态泛型方法看起来很接近该例子,但是,非泛型中的泛型方法并不会在运行时的本地代码中生成不同的类型。
如下:
运行结果:
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(); }
运行结果:
相关文章推荐
- 编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员
- 建议33:避免在泛型类型中声明静态成员
- 编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]
- 编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]
- C# 入门(5) 类和结构,静态,访问器,虚成员和抽象成员,扩展方法,操作符重载,匿名类型
- C#学习之泛型继承和静态成员
- 黑马程序员_C#面向对象(值类型和引用类型,构造函数,常量与静态成员,命名空间,索引)
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
- C# 2005如何根据类型声明的字符串反射创建泛型(Generic)对象
- C#中泛型特性4-静态成员
- LCC编译器的源程序分析(15)结构类型成员的声明
- [转载]LCC编译器的源程序分析(15)结构类型成员的声明
- C# 泛型1---声明与使用
- C# 静态成员和方法的学习小结
- 关于C#中静态数据成员和静态方法的总结。
- 泛型类型的成员
- C#基础之----静态成员与非静态成员
- C# 2.0 新特性(泛型、可空类型)应用一例
- [C# Tips] 有趣的类型静态构造器
- C#中的类型构造函数(静态构造函数)