我在尝试使用单例模式时遇到了一个问题。看起来很简单,但它比平常花了我更长的时间。
这是一个场景:
在第一次集会中,我们有:
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 ,但它也不起作用。
我做错了什么?对不起,如果问题似乎太容易了。
答案 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 的项目必须同时引用它们。