首页 / C# / C#make class static?
C#make class static?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#make class static?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1694字,纯文字阅读大概需要3分钟。
内容图文
我有一个这样的课:
class ContentManager : IDisposable
{
List<int> idlist = new List<int>();
public int Load(string path)
{
//Load file, give content, gets an id
//...
int id = LoadFile(myfilecontent);
idlist.Add(id);
return id;
}
public void Dispose()
{
//Delete the given content by id, stored in idlist
foreach(int id in idlist)
{
DeleteContent(id);
}
}
}
我想让它成为静态的,因为我只需要一个实例,并且可以在不提供实例的情况下从其他所有类访问该函数.
我可以使其中的每个变量都是静态的,函数是静态的.
但我的问题是这个IDisposable.我不能在静态类中使用接口.我怎么能在最后做一些动作?我的意思是我可以删除该接口,但将函数保留在其中并使用我的主类,当我的主类被释放时,我调用ContentManager.Dispose().但是当我忘记在我的主…
你有一个很好的解决方案吗?确保每次程序关闭时都调用Dispose?
编辑:我在图形卡中加载数据并返回指针.当我的应用程序关闭时,我需要从显卡中删除内容.为了安全起见,一切都被删除了,我使用了dispose.
解决方法:
在这种情况下,为什么需要IDisposable接口?静态终结器和析构函数是不可能的,因为只有当AppDomain关闭时才会卸载类型,所以无论如何,你可以使用IDisposable的事实都没有用.
如果你真的需要实现IDisposable并希望只有一个类的实例,那么使用Singleton模式是一个更好的解决方案吗?
您的课程可能如下所示:
class ContentManager : IDisposable
{
List<int> idlist = new List<int>();
static ContentManager instance=null;
ContentManager()
{
}
public static ContentManager Instance
{
get
{
if (instance==null)
{
instance = new ContentManager();
}
return instance;
}
}
public int Load(string path)
{
//Load file, give content, gets an id
//...
int id = LoadFile(myfilecontent);
idlist.Add(id);
return id;
}
public void Dispose()
{
//Delete the given content by id, stored in idlist
foreach (int id in idlist)
{
DeleteContent(id);
}
}
}
它不是线程安全的,但在您的场景中可能就足够了.
内容总结
以上是互联网集市为您收集整理的C#make class static?全部内容,希望文章能够帮你解决C#make class static?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。