如何在释放掉静态类之后再次“激活”

runerback 2016-01-08 11:52:09
这问题有点说不太清楚……

有个类:

public class Class1
{
static Class1()
{
Singleton = new Class1();
Console.WriteLine("static .ctor");
}

public static Class1 Singleton;

public void Show(double i)
{
Console.WriteLine("{1} - {0}", DateTime.Now, i);
}

public void Dispose()
{
Class1.Singleton = null;//很明显是错的
}
}

然后这样调用:

Class1.Singleton.Show(0.1);
Class1.Singleton.Dispose();
Class1.Singleton.Show(1);

第一次会调用静态的.ctor,释放后再调用出错,我想在释放掉它之后,调用Show方法的时候再次实例化,但是我这样写就会出现空引用问题,记着好像是要在系统的一个什么类型管理器中释放,但不知道具体是什么样的。

写成属性然后再用一个bool标志来判断然后在protected构造函数中初始化就能达到效果,但我并不想问这个问题该如何解决而是想知道系统是如何管理静态类的,它怎么知道这个类已经调用过静态构造函数了
...全文
120 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
static object lockObj = new object();
public void Show(double i)
{
    lock(lockObj )
    {
         if(Class1.Singleton==null)
         {//重新new
         }
    }
    Console.WriteLine("{1} - {0}", DateTime.Now, i);
}
runerback 2016-01-08
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
但是如果你顺应正常成人的思维习惯和知识体系,而不用小孩儿那种“我偏要......”的方式来说(例如就是想看水中倒影),岂不是对自己将来更有利?
好吧,谢谢。确实经常因为这种想法导致进度赶不上
  • 打赏
  • 举报
回复
引用 楼主 shaoerbao 的回复:
但我并不想问这个问题该如何解决而是想知道系统是如何管理静态类的,它怎么知道这个类已经调用过静态构造函数了
这谈不上什么“解决”。比如说人家跟你说“天上有太阳”,你非要解决问题“水盆中怎样也有太阳”,最后你认为你是解决了这个问题。 但是如果你顺应正常成人的思维习惯和知识体系,而不用小孩儿那种“我偏要......”的方式来说(例如就是想看水中倒影),岂不是对自己将来更有利?
  • 打赏
  • 举报
回复
它不知道。它加载类型代码的时候就调用类型实例化方法,它之后压根用不着纠结什么“再次实例化”问题,因为加载了就不会再次加载。
runerback 2016-01-08
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
目前就在用这种方法

110,546

社区成员

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

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

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