Вы пытались просто установить тестовую версию на новую машину и посмотреть, сработает ли это? Согласно этой странице поддержки IBM ,
Действительный код авторизации продукта Авторизованного пользователя может использоваться для лицензирования до двух (2) установок продукта, используемых одним и тем же лицом. ] blockquote>
Это может относиться и к тестовым версиям, так что, возможно, вы можете просто переустановить его и продолжить. В противном случае, это никогда не повредит написанию электронной почты службы поддержки IBM с описанием вашей проблемы, поскольку передача лицензии должна быть обычной ситуацией для большинства разработчиков программного обеспечения.
Это кажется нет. Это декомпиляция с отражателем:
private static string Test
{
[CompilerGenerated]
get
{
return <Test>k__BackingField;
}
[CompilerGenerated]
set
{
<Test>k__BackingField = value;
}
}
Для полноты, в полевых событиях и встроена безопасность потоков, но в этом они одиноки. Автоматически реализованные свойства не имеют таких особенностей. Однако вы можете сделать что-то вроде:
public static double SomeProp
{ // ### NOT RECOMMENDED ###
[MethodImpl(MethodImplOptions.Synchronized)] get;
[MethodImpl(MethodImplOptions.Synchronized)] set;
}
Проблема в том, что он заблокирует Type
, что плохо . Я бы лично реализовал для этого свою синхронизацию.
Я так не верю. Я верю, что они просто синтатический сахар для:
private static T _prop;
public static T Prop
{
get { return _prop; }
set { _prop = value; }
}
Нет, они не Threadsafe. Статические свойства так же уязвимы, как статические поля, к вопросам параллелизма.
Раздел 10.7.4
Секция 10.7.4 из Спецификации C #:
, когда свойство указано как AN автоматически реализовано свойство, Скрытое поле поддержки автоматически доступны для собственности, а Аксессуары реализованы для чтения из и напишите на это поле поддержки. То В следующем примере:
public class Point {
public int X { get; set; } // automatically implemented
public int Y { get; set; } // automatically implemented
}
эквивалентно следующей декларации:
public class Point {
private int x;
private int y;
public int X { get { return x; } set { x = value; } }
public int Y { get { return y; } set { y = value; } }
}
Это то, что мы обещаем, и это то, что вы получаете. Точка автосовой недвижимости заключается в том, чтобы сделать самую основную, простое, дешевую вещь; Если вы хотите сделать что-то фантастику, то вы должны написать «настоящую» свойство.
Нет. Вы должны обернуть их в механизмах блокировки нити.
object _lock = new object();
public static Main(string[] args)
{
lock(_lock)
{
Prop = new T();
}
T val = null;
lock(_lock)
{
val = Prop;
}
}
Нет синхронизации, предоставляемых автоматическими свойствами, включая статические свойства.
Если вам нужна полная безопасность потоков, вы захотите использовать свои собственные свойства с полевым полем и обрабатывать синхронизацию самостоятельно.