Безопасны ли статические классы

Я прошел через msdn, где написано, что все статические классы являются потокобезопасными. Ну, эта статья предназначена для версии 1.1...

http://msdn.microsoft.com/en-us/library/d11h6832(v=vs.71).aspx

Все публичные статические члены (методы, свойства, поля и события) в .NET Framework поддерживают параллельный доступ в многопоточной среде. Таким образом, любой статический член .NET Framework может одновременно вызываться из двух потоков, не сталкиваясь с условиями гонки, взаимоблокировками или сбоями.

Ответ 1

Нет, он не говорит, что статические классы являются потокобезопасными, он говорит, что публичные статические элементы являются потокобезопасными.

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

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

Ответ 2

Что это означает, что все статические члены в рамках .NET framework разработаны безопасным потоком. Это означает, что все статические методы/поля/свойства, разработанные Microsoft для .NET Framework. Если вы хотите использовать статический член, предоставленный самой .NET Framework, тогда вы можете считать его потокобезопасным и использовать его как таковой. Тем не менее, я все же был бы подозрительным в отношении действительности этого утверждения и предполагаю, что безопасность без потоков пока не будет доказана иначе.

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

Также взгляните на это, чтобы понять, что такое статические члены и какие статические классы:

Статические классы и статические члены