.NET «Глобальные» переменные;Какой из них лучше? - PullRequest
3 голосов
/ 08 марта 2011

Какой я должен использовать?

Это:

public class MyClass
{
    static string m_MyString = "My string here";
    public static string MyString { get { return m_MyString; } }
}

Или это:

public class MyClass
{
    public static readonly string MyString = "My string here";
}

Ответы [ 3 ]

1 голос
/ 08 марта 2011

Я бы сказал ни . Риторические вопросы, чтобы спросить себя, чтобы помочь с вашим решением: где они используются? Разве они не могут быть объявлены частными в классе, который их использует? Если они используются несколькими классами, возможно, эти классы могут содержать ссылку на MyClass? Есть ли какие-либо операции, связанные со строками, которые можно поместить в MyClass?

1 голос
/ 08 марта 2011

Если вам нужно только поделиться такими строками в вашем коде, я бы предложил вам использовать ресурсы (resx) вместо того, чтобы заново изобретать колесо.

Просто создайте ресурс и используйте его.

С другой стороны, если вы хотите поделиться общими значениями, я бы предложил вам создать что-то вроде класса среды, например, найденного в библиотеке классов .NET под названием «CustomEnvironment» (замените «Custom» на любой идентификатор это было бы разумно для вас).

Эта "среда" обеспечивает доступ к общим ресурсам, информации и методам, относящимся к платформе, которые будут форматировать, преобразовывать или размещать любые данные или объекты на платформе.

Вы должны избегать "глобальных переменных", способных делать вещи, и классов, которые нарушают любые шансы на хороший ООП-график. Потому что «классы констант» являются хорошим способом быстрого выполнения действий, но как вы можете ответить на вопрос «что этот класс представляет в вашей объектной модели?»:

  • Это группа переменных: неправильно, это не класс, потому что эти переменные (или константы, или свойства) не имеют значения: вы можете реализовать их в этом классе или в любом другом.

  • Это класс инструментов: классы инструментов «все», которые будут перемещать все «общие» свойства и поведения в класс, так что все остальные получают к нему доступ для некоторых критических операций, не ООП, это просто группировка .

  • Это набор ресурсов. Хорошо, вам не нужно изобретать велосипед, просто используйте встроенные средства управления ресурсами в библиотеке классов Microsoft .NET.

  • Это всего лишь пример. Плохой пример;)

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

Возможно, вам нужно что-то вычислить или обработать перед установкой такой «константы»: вы будете использовать поле только для чтения, но для меня - просто мнение - я предложу вам использовать свойство, чтобы выставить его значение (может быть, вам не понадобится такое поле только для чтения, потому что иногда вы предпочитаете каждый раз вычислять / обрабатывать доступ к свойству с помощью кода, но если вы всегда делаете это со свойствами, вы можете инкапсулировать эту деталь реализации).

1 голос
/ 08 марта 2011

Используйте последнее, но с небольшим изменением:

public static class CommonStrings
{
    public const string MyString = "My string here";
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...