C#make class static?
发布时间:2020-12-16 10:34:08 所属栏目:百科 来源:网络整理
导读:我有一个这样的课: class ContentManager : IDisposable{ Listint idlist = new Listint(); public int Load(string path) { //Load file,give content,gets an id //... int id = LoadFile(myfilecontent); idlist.Add(id); return id; } public void Disp
我有一个这样的课:
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,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); } } } 它不是线程安全的,但在您的场景中可能就足够了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |