C# 初始化变量是否为空?

C# 初始化变量是否为空?,c#,methods,static,null,initialization,C#,Methods,Static,Null,Initialization,我试图从静态方法初始化静态变量,但在初始化后仍然为null。我做错了什么 class Database { public static Database Connection = null; public static void Create() { Database.Connection = new Database(); if (Database.Connection == null) { Console.Write

我试图从静态方法初始化静态变量,但在初始化后仍然为null。我做错了什么

class Database {
    public static Database Connection = null;

    public static void Create() {
        Database.Connection = new Database();

        if (Database.Connection == null) {
            Console.WriteLine("Null");
        }
    }

    public Database() {
        Console.WriteLine("I got called");
    }
}
我是不是遗漏了什么?尽管已调用构造函数,但调用方法后Database.Connection为NULL

class Database {
    public static Database Connection = null;

    static Database() {
        Database.Connection = new Database();

        if (Database.Connection == null) {
            Console.WriteLine("Null");
        }
    }

    public Database() {
        Console.WriteLine("I got called");
    }
}
你永远不会调用Create。如果愿意的话,您可以使用静态构造函数来实现这一点,就像我在上面所做的那样。

使用,来初始化静态字段

static Database()
{
    Database.Connection = new Database();
}

一个选项是将静态成员设置为属性:

class Database
{
    private static Database _connection = null;
    public static Database Connection
    {
        get
        {
            if(null == _connection)
            {
                _connection = new Database();
            }
            return _connection;
        }
    }
}
如果您正在实现一个单例,那么应该通过将构造函数设为私有来隐藏它

private Database()
{
    // This will only be called once, when the Connection
    // property getter is first accessed and the private 
    // _connection field is still null.  Note: when using 
    // the debugger, this may be before it is actually called
    // explicitly from within your code!
    Console.WriteLine("Database() constructor called");
}

你在哪里注意到它仍然是空的?你可以提供一个。你可以提供代码来复制它吗?对我来说,你发布的代码工作正常。你正在尝试实现一个单例类吗?对由同一数据库类的所有实例共享的数据库类的一个静态实例的引用看起来有点奇怪。很抱歉,我没有在这里显示它,但我正在从外部调用Create方法。这就是为什么我说要调用方法和构造函数。Program.cs文件中正在使用Database.Create。这是唯一的方法吗?正如我在另一篇评论中所说,我正在调用Database.Create,在执行任何其他操作之前先在Program.cs文件中创建。您应该提供代码,因为您提供的代码工作正常。