C# 如何防止直接调用公共方法
我在下面有一个类,它是作为一个单例实现的,并添加了几个带参数和不带参数的方法,省略了细节:C# 如何防止直接调用公共方法,c#,oop,C#,Oop,我在下面有一个类,它是作为一个单例实现的,并添加了几个带参数和不带参数的方法,省略了细节: public class LogManager { public static LogManager Instance { get { return instance; } } public LogManager Create(Guid productId) { _produc
public class LogManager
{
public static LogManager Instance
{
get
{
return instance;
}
}
public LogManager Create(Guid productId)
{
_productId = productId;
return Instance;
}
public LogManager Create()
{
return Instance;
}
public void WriteStateChangeEvent()
{
}
}
有没有办法限制直接调用实例
,这样就可以像这样调用LogManager.Instance.Create(newProductId).WriteStateChangeEvent()
或LogManager.Instance.Create().WriteStateChangeEvent()
但决不能像这样调用LogManager.Instance.WriteStateChangeEvent()
这不是一个一般的OOP单例模式问题,而是一个关于具体实现的问题这里实际上不应该有单例,因为在概念上没有单个对象 您只需公开该类型的构造函数,如果确实需要,可以使用factory
Create
方法,然后对每个单独初始化的实例调用WriteStateChangeEvent
通过简单地反复“重用”一个类实例来表示该类的多个概念实例,会让该类的用户感到困惑,并且非常容易出错
如果有任何状态在概念上真正独立于所有实例,那么它可以在静态
字段中表示
另一种方法是,假设有其他一些重要的原因来创建一个单例,那就是完全删除
Create
方法,并将productId
作为参数传递给WriteStateChangeEvent
,这样您就不再存储绑定到概念实例的状态。与论坛站点不同,我们不使用“谢谢”或“感谢任何帮助”或签名。请参阅“.谢谢,我同意,但这是一个要求-将此类实现为一个单例。@Victor要求的原因是什么?该类在概念上不是一个单例。它具有特定于单个概念实例的状态,您只是尝试重用单个实例来实现它,这是(可以理解的)造成问题。这只是我必须处理的一个要求。同样,我同意你的说法,但不能改变它。@Victor该要求来自何处?为什么需要使用单例?实际的基础约束影响你应该如何着手解决这个问题。他们来自产品所有者,他们有足够的技术,知道单例是什么,但不足以理解对象状态