2011-02-03 1 views
0

КодАнализ кода рекомендует использовать const в определении, но как в global.asax?

public class Global : System.Web.HttpApplication 
{ 

    public const string globalServernameSHA = string.Empty; 
    public static string globalSqlConnection = string.Empty; 

    protected void Application_Start(object sender, EventArgs e) 
    { 
     globalServernameSHA = ConfigurationManager.AppSettings["varServernameSHA"].ToString(); 
     globalSqlConnection = ConfigurationManager.ConnectionStrings["varConnectionString"].ToString(); 
    } 

Эти переменные должны быть считаны только один раз и, безусловно, должен быть только для чтения. Они должны быть доступны для всего проекта и поэтому должны быть общедоступными.

Есть ли способ определить const в коде, как это?

Благодаря

ответ

2

декларировать их как неизменяемые и перемещение инициализации в конструктор:

public class Global : System.Web.HttpApplication 
{ 

    public readonly string globalServernameSHA; 
    public readonly string globalSqlConnection; 

    public Global() 
    { 
     globalServernameSHA = ConfigurationManager.AppSettings["varServernameSHA"].ToString(); 
     globalSqlConnection = ConfigurationManager.ConnectionStrings["varConnectionString"].ToString(); 
    } 
+0

будет ли это работать с Application_Start (отправитель объекта, EventArgs e)? – feronovak

+0

уверен. но rememer, этот конструктор можно было бы вызвать несколько раз, потому что asp.net поддерживает пул приложений. – gor

0

Они не могут быть объявлены как const, так как значение извлекается из файла настроек. Значения const всегда жестко закодированы в самой исполняемой программе.

readonly - ваш лучший выбор в случае, что означает, что переменные могут быть установлены только в конструкторе (экземпляр или статический конструктор, в зависимости от того, как вы определяете переменные), или в методе, вызываемом конструктором, когда переменная передается как ref.

+0

, но вопрос в том, может ли это использоваться из Application_start? – feronovak

+0

@feronovak - Application_start не является конструктором, и он не устанавливает переменную, переданную как ref. Поэтому переменные readonly могут быть прочитаны, но не записаны в Application_start –