2011-01-09 2 views
1

Я программирование с использованием C#, после программирования на C. Таким образом, я использую много констант, такие как «DEFAULT_USER_ID», «REMOTE_ADDRESS» и такие ...Общего CS вопрос о константах

кажется, мне, что это довольно «старомодно», чтобы использовать такие константы и, возможно, есть еще один более элегантный способ использования некоторых постоянных данных между объектами.

Любые идеи о том, как это можно сделать элегантно?

Спасибо.

ответ

4

Использование констант для таких вещей, как DEFAULT_USER_ID, по-прежнему «путь к работе» (если вы не хотите, чтобы он настраивался, но это еще одна тема). ->const (C# Reference)

Не используйте константы для перечислений (FILE_TYPE_DOC = 1, FILE_TYPE_XLS = 2, ...). Это может быть сделано более элегантно в C# с enums:

enum FileType { 
    Doc, 
    Xls, // or, optionally, "Xls = 2". 
    ... 
}; 

Вы также можете использовать это для флагов (констант комбинируемых операторами поразрядными), что является еще одним общим Прецедент констант в C:

[Flags] 
enum FontDecoration { 
    None = 0, 
    Bold = 1, 
    Italic = 2, 
    Underline = 4 
} 
+0

не знал о «флажках» thingy :) Приятно знать, что это по-прежнему «путь», это означает, что я не слишком старомоден;) – Roman

1

Вы можете использовать статические или свойства только для чтения, например, для App класса

class MyClass { 

public static readonly int myVal=10; 

} 
+0

Это не может быть хорошей идеей, поскольку const определяется во время компиляции, а члены readonly будут инициализированы в конструкторе класса, а их использование отличается, вы можете использовать const для sth, как PI в математике, но использование readonly для PI не может быть хорошей идеей –

+0

Это лучше? или просто еще один способ сделать то же самое? – Roman

+0

Ключевое слово readonly отличается от ключевого слова const. Поле const может быть инициализировано только при объявлении поля. Поле readonly может быть инициализировано либо в объявлении, либо в конструкторе. Поэтому поля readonly могут иметь разные значения в зависимости от используемого конструктора. Кроме того, хотя поле const является константой времени компиляции, поле readonly может использоваться для констант времени выполнения http://msdn.microsoft.com/en-us/library и http://msdn.microsoft.com/en- us/library/e6w8fe1b% 28v = vs.71% 29.aspx/aa645752% 28VS.71% 29.aspx –

2
  1. Вашего именование не соответствует .net. Используйте PascalCase вместо SCREAMING_CAPS
  2. Помните о двоичном коде versioning semantics of constants в .net. Возможно, вы захотите использовать поле static readonly вместо const.
  3. Идеально использовать enum s вместо нескольких целых констант.
0

Вы всегда можете использовать пользовательские Enums, чтобы получить Visual Studio Intellisense.

1

Кроме того, вы можете определить константы, как, что

public static class Defaults 
    { 
     public const string MyName = "SuperName"; 
    } 

    public class MyClass 
    { 
     string s = Defaults.MyName; 
    } 

В таком случае вы можете использовать класс по умолчанию в любом месте вашего приложения

Также вы можете знать, что существует два способа определения постоянных переменных Static readonly vs const

+0

Это как файл конфигурации, если я не ошибаюсь , Но хорошая идея ... :) спасибо. – Roman

1

Другой альтернативой является сохранение постоянных значений в файле .config, поэтому вам не нужно перекомпилировать приложение, чтобы при необходимости изменить свои значения. В зависимости от того, как развертывается ваш код, может быть или не быть целесообразным, чтобы ваши настройки отображались как обычный текст. См. Эту статью для простого примера использования файла .config: http://www.developer.com/net/net/article.php/3396111/Using-Application-Configuration-Files-in-NET.htm

+0

спасибо! Действительно полезно. – Roman

0

Как насчет конфигурационных файлов? вы, ребята, не используете файлы конфигурации в C#? DEFAULT_USER_ID и REMOTE_ADDRESS выглядят очень подходящими для конфигурационного файла

Смежные вопросы