为什么静态方法在单例实例中不可用?
问题描述:
我创建了名称为SingletonGenerator<>
的泛型类。用于实现Singelton设计模式。所以,下面的代码是它的类:为什么静态方法在单例实例中不可用?
SingletonGenerator.cs
public class SingletonGenerator<T> where T : class, new()
{
private static readonly Lazy<T> _instance =
new Lazy<T>(() => new T(), LazyThreadSafetyMode.ExecutionAndPublication);
private SingletonGenerator()
{
}
public static T Instance => _instance.Value;
}
而且,创建其他类获得实例:
AppDb.cs
public class AppDbContext
{
public string Database { get; set; }
private static string ConnectionString { get; set; }
public static void Send()
{
}
public void Go()
{
}
}
在Program.cs
class Program
{
static void Main(string[] args)
{
var context = SingletonGenerator<AppDbContext>.Instance;
var database = context.Database; // is available
var connection = context.ConnectionString; //is not available
context.Go(); // is available
context.Send(); // is not available
}
}
我的问题是为什么静态方法在单例实例中不可用?
而我的代码是正确的?
答
对于初学者ConnectionString
是private
。您无法从其他课程访问它。您也不能从实例访问static
方法。你需要使用类
AppDbContext.ConnectionString;
AppDbContext.Send();
答
很好,因为它们是静态的,属于类型(在你的情况AppDbContext )而不是对象实例,尽管用于访问它的属性是静态的,但仍然创建一个实例的单例模式。所以,你可以给他们打电话与类型名称
var connection = AppDbContext.ConnectionString;
AppDbContext.Send();
好......这些都是'static'不'instance'成员,让你从类型访问它们不是实例:'AppDbContext.ConnectionString' –
你能不能读编译错误? –