如何从单例调用继承方法
本文关键字:继承 方法 调用 单例 | 更新日期: 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
...
}
它告诉我:
重要的是,我不能将BaseClass设置为static。此外,我试图将方法的定义设置为受保护的虚拟,但它也不起作用。不包含'Method()'的定义,也没有扩展方法'Method'
我做错了什么?如果这个问题看起来太简单了,请原谅。
这不是单例,因为您有一个公共构造函数。您需要将其设置为私有,以便静态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 的项目必须同时引用两者