当前位置: 首页 > 编程语言 > C#

C#泛型实例都是公共静态成员变量吗?分享

时间:2023-04-10 17:36:12 C#

C#泛型实例都是公共静态成员变量吗?在C#中,我有一个泛型类:publicclassMyGenericwhereParameterClass:MyGenericParameterClass,new(){publicstaticintVariable;现在在C++中,如果我用不同的参数实例化一个模板类,每个完整的类都会得到它自己的变量,所以我不能告诉MyGeneric.Variable=1;//在C++中在C++中无效,但似乎我可以在C#中做到这一点。我想澄清一下......如果我有一个带有静态成员变量的泛型,那么该变量是否在泛型的所有实例之间共享?ECMAC#语言规范第25.1.4节中针对泛型类声明的静态变量在同一封闭构造类型的所有实例(第26.5.2节)之间共享,但不在不同封闭构造类型的实例之间共享。无论静态变量的类型是否涉及任何类型参数,这些规则都适用。您可能会看到这篇博文:泛型类中的静态字段,作者:GusPerez您也不能在C#中这样做。我的通用变量=1;考虑ECMA语言规范中的以下示例。C类{静态整数计数=0;公共C(){计数++;}publicstaticintCount{get{返回计数;}}}classApplication{staticvoidMain(){Cx1=newC();(C.计数);//打印1Cx2=newC();Console.WriteLine(C.Count);//打印1Console.WriteLine(C.Count);//打印1Cx3=newC();Console.WriteLine(C.Count);//Prints2}}MyGeneric.VariableMyGeneric.Variable这两个是不同的静态变量,被视为单独的类。不,它不是共享的。MyGeneric的每种可能性,每个MyGeneric类都将解析为不同的运行时类型。请检查是否没有带有Variable静态成员的非genericsMyGeneric类。不它不是。通用类型可以是“开放”或“封闭”。开放类型类似于List,其中没有定义类型参数;列表是封闭类型。本质上,运行时不会将开放类型视为正确的“类型”——只有封闭版本才是真正的类型。所以MyGeneric和MyGeneric是两个完全不同的类型,因此有自己的静态变量实例。由于您不能按照建议的方式调用静态成员,因此更加明显:MyGeneric.Variable不会在C#中编译。这个控制台应用程序代码非常简单地说明了以上是C#学习教程:C#泛型的所有实例都是公共静态成员变量吗?如果分享的内容对你有用,需要了解更多C#学习教程,希望你多多关注——classProgram{staticvoidMain(string[]args){Test.i=2;测试.i=8;Console.WriteLine(测试.i);//如果字段是共享的,将写入“8”Console.WriteLine(Test.i);//Console.WriteLine(Test.i);//不编译//Console.WriteLine(Test.i);//不编译}}classTest{publicstaticinti;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: