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该要求来自何处?为什么需要使用单例?实际的基础约束影响你应该如何着手解决这个问题。他们来自产品所有者,他们有足够的技术,知道单例是什么,但不足以理解对象状态