Являются ли статические переменные потокобезопасными? C #

Я хочу создать класс, который хранит DataTables, это помешает моему приложению импортировать список деталей каждый раз, когда я захочу его получить. Поэтому это нужно сделать один раз, я считаю, что это делает следующий код, но я не уверен, является ли он потокобезопасным.

Приведенный ниже код находится в разделе бизнес-уровня моего трехуровневого приложения, он возвращает DataTable на уровень представления.

public class BusinessLayerHandler
{
    public static DataTable unitTable;
    public static DataTable currencyTable;

    public static DataTable GetUnitList()
    {
        //import lists each time the application is run
        unitTable = null;
        if (unitTable == null)
        {
            return unitTable = DatabaseHandler.GetUnitList();
        }
        else
        {
            return unitTable;
        }
    }

    public static DataTable GetCurrencyList()
    {
        //import lists each time the application is run
        currencyTable = null;
        if (currencyTable == null)
        {
            return currencyTable = DatabaseHandler.GetCurrencyList();
        }
        else
        {
            return currencyTable;
        }
    }

Любая помощь приветствуется, если есть лучший способ кэширования DataTable, пожалуйста, дайте мне знать.

Обновление:

Благодаря вашему мнению, это рекомендуемый метод. это, если я правильно понял:

public class BusinessLayerHandler
{
    private static DataTable unitTable;
    private static DataTable currencyTable;

    private static readonly object unitTableLock = new object();
    private static readonly object currencyTableLock = new object();

    public static DataTable GetUnitList()
    {
        //import lists each time the application is run
        //unitTable = null;

        lock (unitTableLock)
        {
            if (unitTable == null)   
            {
                return unitTable = DatabaseHandler.GetUnitList();
            }
        }
        return unitTable;
    }

    public static DataTable GetCurrencyList()
    {
        //import lists each time the application is run
        lock (currencyTableLock)
        {
            if (currencyTable == null)
            {
                return currencyTable = DatabaseHandler.GetCurrencyList();
            }
        }
        return currencyTable;
    }
}
42
задан Ryan S 4 August 2011 в 12:57
поделиться