如何释放一个静态变量

jimmyroc 2009-09-10 08:59:55
请高人指点,我有两个类,一个在命名空间ns1下class_a ,另外一个在命名空间ns2下class_b,在class_b里面会使用私有的静态变量static_a来统计该类被实例化的次数。如果我在class_a中实例化class_b,每次实例化一个对象object_class_b,不想让static_a计数,怎么办?
...全文
1411 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
mamxfx 2012-10-19
  • 打赏
  • 举报
回复
C# 不支持静态局部变量(在方法范围内声明的变量)。
微创社(MCC) 2009-09-10
  • 打赏
  • 举报
回复
BTW:静态变量的不可测性

class A
{
public static int X = B.Y + 1;
}

class B
{
public static int Y = A.X + 1;
}

class MyClass
{
static void Main()
{
System.Console.WriteLine("A.X:{0}", A.X);
System.Console.WriteLine("B.Y:{0}", B.Y);
}
}


猜猜看,谁先出生,结果是什么?
微创社(MCC) 2009-09-10
  • 打赏
  • 举报
回复
直到程序结束时才释放
  • 打赏
  • 举报
回复
不过我还是没有看懂你说的“,每次实例化一个对象object_class_b,不想让static_a计数”,这么复杂?!

主要是你玩变成概念太多,(应用)实用概念太少,不知道这么复杂有什么用?
  • 打赏
  • 举报
回复
“完全清理占用的内存”跟你没有关系,.net系统会根据内存使用情况来自动清理占用的内存。

但是要让它可以执行,你是可以随时“释放”变量值的。设置变量

= null;

就可以了。
cuike519 2009-09-10
  • 打赏
  • 举报
回复
静态字段是在加载类型的时候由加载程序创建的,某些静态字段是不分配内存的,只要类型存在这个字段就存在,释放其内存只有终止程序。

至于实例对象,要看分配在哪,如果是分配在函数栈上,函数结束以后内存即被回收,如果是分配在托管堆上,当该对象无法从根到达的时候下次垃圾回收的时候该对象被自动回收。

根通常是:静态变量、当前栈中的变量、寄存器变量等。
wxhysoftsodc 2009-09-10
  • 打赏
  • 举报
回复
别客气,平时也没注意这些,看到你提问才想了想。也加深了自己的理解。
jimmyroc 2009-09-10
  • 打赏
  • 举报
回复
确实,thanks
wxhysoftsodc 2009-09-10
  • 打赏
  • 举报
回复
我说的基本上跟他们一个意思。上面很多人都提到,进程结束以后,静态变量才会被释放掉。我觉得也只能这样。如果让你手动释放掉了,之后要创建这个类的实例怎么办呢?还有,没有释放掉的那些实例怎么办呢?它们没法共享类的静态成员了。
jimmyroc 2009-09-10
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20041104/20/3522775.html
刚才看了这个例子,貌似是进程结束后,内存被销毁,但是不知道能不能手动释放内存
wxhysoftsodc 2009-09-10
  • 打赏
  • 举报
回复
静态变量是类的实例共享的,除非这个类的实例全部消失吧。我是这么理解的。不知道对不对。等高手回答吧。
jimmyroc 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wxhysoftsodc 的回复:]
构造函数加个参数,用来标识是否是由class_a创建。在class_b里面判断,不是的情况,static_a++;
是的情况下,不变。
[/Quote]
完全清理类占用的内存
jimmyroc 2009-09-10
  • 打赏
  • 举报
回复
有人吗,我上面表达的不够清楚,我意思是:怎么完全清理实例化一个类占用的内存,包括类中的静态变量
wxhysoftsodc 2009-09-10
  • 打赏
  • 举报
回复
构造函数加个参数,用来标识是否是由class_a创建。在class_b里面判断,不是的情况,static_a++;
是的情况下,不变。

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧