为什么调用方法的第一种方法在以下上下文中不起作用?我试图在另一个类的另一种方法中使用:
var center = Setting.CacheInstance.GetCentres(new Request
{
}); // this does not work
var center2= Setting.GetCentres(new Request
{
}); // this works
类别:
public sealed class Setting
{
private static Lazy<Setting> lazy =
new Lazy<Setting>(() => new Setting());
public static Setting CacheInstance
{
get
{
if (!lazy.IsValueCreated)
lazy = new Lazy<Setting>(() => new Setting());
return lazy.Value;
}
}
private Setting()
{
}
public static List<string> GetCentres(Request request)
{
return GetCentres(request);
}
private static List<string> GetCentres(Request request)
{
//implementation
}
}
我在这里缺少什么?
答案 0 :(得分:1)
GetCentres
是静态的,因此您只能从类中调用它,而不是从实例调用它。
Setting.CacheInstance.GetCentres
首先获取实例,然后尝试在其上调用静态。删除方法上的静态:
public List<string> GetCentres(Request request)
{
return GetCentres(request);
}
答案 1 :(得分:1)
你也可以查看jon双向飞碟的这篇文章:http://csharpindepth.com/Articles/General/Singleton.aspx ..所有你想要实现的单吨模式的不同方法
第一种方式不起作用,因为它的静态方法
var center = Setting.CacheInstance.GetCentres(new Request
GetCentres
是静态方法,您无法通过isntace调用它
解决方案 - 通过实例访问remvoe static
make方法,您的属性getter中没有额外的检查
public sealed class Setting
{
private static Lazy<Setting> lazy =
new Lazy<Setting>(() => new Setting());
public static Setting CacheInstance
{
get
{
return lazy.Value;
}
}
private Setting()
{
}
public List<string> GetCentres(Request request)
{
return GetCentres(request);
}
//you cannot have two methos with same name and same parameter that
//is also issue
//private List<string> GetCentres(Request request)
//{
//implementation
//}
}
答案 2 :(得分:0)
GetCentres
是一个静态方法,因此您将无法使用该类的实例来调用它。您需要通过使用类本身(所以Setting.GetCentres
)来调用它,或者从方法中删除static
限定符。您可以在the official C# Programming Guide中获得更多信息。
答案 3 :(得分:0)
在C#中,无法使用instance访问静态成员。静态成员属于该类而不是特定实例。这意味着只存在一个静态字段实例,或者您不创建任何实例。它将由所有实例共享。
Setting.GetCentres()
或
从GetCentres()
中删除static修饰符public List<string> GetCentres(Request request)
{
return GetCentres(request);
}