如何从Singleton调用继承的方法?

时间:2015-08-05 15:09:14

标签: c# singleton

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

这是一个场景:

在第一次集会中,我们有:

test1
test2
test 3
test4
test 5

在其他集会中:

public abstract class BaseClass
{
    public void Method()
}

然而,当我尝试以这种方式从 DerivedClass 之外使用它时,也在另一个程序集中使用它:

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();
    }    
}
告诉我:

  

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

重要的是要说我不能将 BaseClass 设置为 static 。另外,我尝试将方法的定义设置为 protected virtual ,但它也不起作用。

我做错了什么?对不起,如果问题似乎太容易了。

2 个答案:

答案 0 :(得分:0)

这不是单身,因为你有一个公共构造函数。您需要将其设置为私有,因此静态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();
    }
}

答案 1 :(得分:0)

问题在于我没有将包含 BaseClass 的程序集引用到使用 DerivedClass 的程序集中,在本例中是第三个。

因此,带有 SomeMethod 的项目必须同时引用它们。