计算类的实例可能重复:如何知道C#中创建了多少个对象?是否可以获取所选类活动(已创建但尚未销毁)的实例数?例如publicclassMyClass{}c1=newMyClass();c2=新的MyClass();count=GetActiveInstances(typeof(MyClass))应该返回2。如果GC销毁这些类中的任何一个,则返回1或0。您可以在程序中保存全局静态计数器。这是一个简单的线程安全解决方案:classMyClass{staticintcounter=0;publicMyClass(){Interlocked.Increment(refcounter);}~MyClass(){Interlocked.Decrement(refcounter);也看看下面这个类似的问题——Countingthenumberofobjectsofanclasstypeinaclassmethodthis:publicclassMyClass{privatestaticintinstances=0;publicMyClass(){实例++;}~MyClass(){实例--;}publicstaticintGetActiveInstances(){返回实例;使用:MyClassc1=newMyClass();MyClassc2=newMyClass();intcount=MyClass.GetActiveInstances();只有在构造函数(递增)和终止符(递减)中实现计数机制。但即使这样也不能说明实际上没有活动实例(没有人提到它们)但尚未被收集。此外,向类添加终止符(无论多么微不足道)都会对性能产生不利影响,这是反对这样做的理由。公共类MyClass{静态整数计数;静态对象_lock=新对象();publicMyClass(){lock(_lock){count++;}}~MyClass(){锁(_lock){计数--;我不知道内置机制,但您始终可以在构造函数中包含一个私有静态变量。公共类MyClass{staticintinstances=0;publicMyClass(){实例++;}~MyClass(){实例--;没有尝试过,但应该可以。试试这个:publicclassMyClass{publicstaticintactiveCount=0;publicMyClass(){activeCount++;}~MyClass(){activeCount--;}}//在主MyClasstestClass1=newMyClass();MyClasstestClass2=newMyClass();Console.WriteLine(MyClass.activeCount);这样的事情是不可能的,但你可以做到注意:classinstance也可以是一个int值,只是为了保持计数。classmytype{publicstaticListclassinstance=newList();publicmytype(){classinstance.Add(this);}publicremoveclass(mytypet){classinstance.Remove(t);t=空;}publicintActiveCount{get{classinstance.Count;}}}publicclassMyClass{publicstaticintcountinstance=0;MyClass(){countinstance++;}~MyClass(){countinstance--;通过在类中为计数创建一个静态变量并在构造函数中递增它并在析构函数构造函数中递减它来尝试它。这可以帮助你。以上就是《C#学习教程:计算实例》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
