如何从单例调用继承方法

本文关键字:继承 方法 调用 单例 | 更新日期: 2023-09-27 18:06:41

我在尝试使用单例模式时遇到了一个问题。这看起来很简单,但花的时间比平时长。

场景如下:

在第一个汇编中有:

public abstract class BaseClass
{
    public void Method()
}

在其他汇编中:

public sealed class DerivedClass: BaseClass
{
    private static DerivedClass _instance;
    public static DerivedClass Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new DerivedClass();
            }
            return _instance;
        }
    }
    private void TestMethod()
    {
        //here is working perfect!
        DerivedClass.Instance.Method();
    }    
}

然而,当我试图使用它从外部的派生类这种方式,也在另一个程序集:

public void SomeMethod()
{
    ...
    DerivedClass.Instance.Method() //do not compile! :s
    ...
}

它告诉我:

不包含'Method()'的定义,也没有扩展方法'Method'

重要的是,我不能将BaseClass设置为static。此外,我试图将方法的定义设置为受保护的虚拟,但它也不起作用。

我做错了什么?如果这个问题看起来太简单了,请原谅。

如何从单例调用继承方法

这不是单例,因为您有一个公共构造函数。您需要将其设置为私有,以便静态Instance属性是访问单个实例的方法。我已经使用了这段代码,它可以完美地编译和工作。

public class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(DerivedClass.Instance.Method());
        Console.WriteLine(DerivedClass.TestMethod());
        Console.ReadKey();
    }
}
public abstract class BaseClass
{
    public string Method()
    {
        return "yo";
    }
}
public sealed class DerivedClass : BaseClass
{
    private static DerivedClass _instance;
    private DerivedClass()
        : base()
    {
    }
    public static DerivedClass Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new DerivedClass();
            }
            return _instance;
        }
    }
    public static string TestMethod()
    {
        //here is working perfect!
        return DerivedClass.Instance.Method();
    }
}

问题是我没有将包含BaseClass的程序集引用到使用DerivedClass的程序集,在这种情况下,是第三个程序集。

因此,带有 someemethod 的项目必须同时引用两者