如何限止类仅被实例化N次?

caobin518 2007-04-16 04:34:26
如何限止类仅被实例化N次?

eg:

User oUser = new User();

.....

要求只能被实例化5次
...全文
922 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckyTOTO 2007-04-18
  • 打赏
  • 举报
回复
单粒模式
summersnowgieno 2007-04-18
  • 打赏
  • 举报
回复
PS, 如果 不想 用 内联初始化 的 话 可以 加 个 锁 做 一下 double check, 也 很 容易~
summersnowgieno 2007-04-18
  • 打赏
  • 举报
回复
To walksnake(凌云剑客)
有关 你 要 的 代码 可以 去 偶 以前 的 bolg 看~不过 那个 blog 偶 已经 不 写 了
http://gieno.spaces.live.com/blog/cns!92FA05C83A5399E7!118.entry

另外,其实 在 C# 中 用 singleton 非常 容易 ~
使用 内联初始化 ,即
private static readonly Singleton instance =
new Singleton();

就 可以 简单 的 适应 多 线程 问题。
iuhxq 2007-04-17
  • 打赏
  • 举报
回复
单件模式===>N件模式

呵呵
babyrockxray 2007-04-17
  • 打赏
  • 举报
回复
没错,忘记了对象销毁的问题 唉
这个很重要,要不然分配了一定数量以后就不能用了
walksnake(凌云剑客)的做法是对的
candyrong 2007-04-17
  • 打赏
  • 举报
回复
学习了
nutpp 2007-04-17
  • 打赏
  • 举报
回复
以上帖的代码

只有babyrockxray(紫色阴影)考虑到了同步问题
只有walksnake(凌云剑客) 考虑到了对象销毁问题

以上两人合起来就是正确答案
summersnowgieno 2007-04-17
  • 打赏
  • 举报
回复
和 singleton 差不多, 稍微 改 一下 就 可以了。

class Multiton
{
private static Multiton instance;

// Note: Constructor is 'protected'
protected Multiton()
{
}

public static Multiton Instance()
{
// Use 'Lazy initialization'
if (instance.count <= 5)
{
instance = new Multiton();
instance.count ++;
}

return instance;
}
}
IT_zen 2007-04-17
  • 打赏
  • 举报
回复
这样做有什么用处呢
wls12342004 2007-04-17
  • 打赏
  • 举报
回复
用instance,在这个函数里进行控制,如果大于7,就return null;
walksnake 2007-04-17
  • 打赏
  • 举报
回复
的确,在托管代码中实现析构函数不是一个推荐办法。不过实现依赖于需求。如果实际需求有这方面的要求,我想也没办法吧?

还有,summersnowgieno兄能否给你您的代码以便我们学习学习?
veryhappy 2007-04-17
  • 打赏
  • 举报
回复
通过工厂产生User实例,在工厂类中进行限制验证
xiang_li5257 2007-04-17
  • 打赏
  • 举报
回复
mark
summersnowgieno 2007-04-17
  • 打赏
  • 举报
回复
To nutpp()
quot “
以上帖的代码

只有babyrockxray(紫色阴影)考虑到了同步问题
只有walksnake(凌云剑客) 考虑到了对象销毁问题

以上两人合起来就是正确答案

.NET 内部 已经 实现 了 相关 问题, 只要 用 内联初始化(如果 需求 里 没要求, 不需要 用, 用了 属于 空间浪费) 就 可以 实现 ~ 没有 必要 把 简单 问题 复杂 化~

另外,不推荐 在 托管代码编程 中 自己 构造 析构函数。
WNASP 2007-04-17
  • 打赏
  • 举报
回复
单件设计模式,无非是再加一个静态的计数器而已!
walksnake 2007-04-17
  • 打赏
  • 举报
回复
同步......
snowdish 2007-04-16
  • 打赏
  • 举报
回复
可以参考一下连接池的设计原理,把对象数 (5)也开放出来
ice2927276 2007-04-16
  • 打赏
  • 举报
回复
单件模式,讲得很清楚
babyrockxray 2007-04-16
  • 打赏
  • 举报
回复
//private User(){} //去掉这一行
这样的话,可以用User user = new User();这样来创建对象
就没有办法计数了
而把构造函数声明为private,就不能用new
而是User user = User.GetInstance();这样来获得对象
可以管理创建对象的数目
walksnake 2007-04-16
  • 打赏
  • 举报
回复
如果用void,那么你在你的方法内部就不能使用return new MyClass()了,关于这一点,去查一查C#的语法,这是最基本的语法问题。
加载更多回复(18)

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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