C # изменчивый двойной

Ниже приведены два варианта, которые вы можете использовать

return default(T);

или

where T : class, IThing
 return null;
10
задан johnc 10 February 2009 в 10:10
поделиться

4 ответа

Причина, почему дважды не может быть объявлен энергозависимым: это - 64 бита, который делает это больше, чем размер слова на x86, который препятствует тому, чтобы он был объявлен энергозависимый в CLI, если я помню правильно.

С Вашим текущим ответом только ссылку рассматривают как являющийся энергозависимым. Это означает, что модель памяти удостоверится, что всегда использует новую ссылку, но она могла все еще использовать устаревшее значение.

Я пошел бы с блокировкой на вашем месте, но одна альтернатива должна использовать Interlocked.Read и Interlocked.Exchange действие на longs, в сочетании с BitConverter.Int64BitsToDouble и BitConverter.DoubleToInt64Bits. Вы могли инкапсулировать это в a VolatileDouble структура. (Я, вероятно, сделал бы это структурой, а не классом.)

16
ответ дан 3 December 2019 в 16:54
поделиться

Для работы как выше у Вас должен был бы быть он неизменный (никакой метод set) - возможно, с некоторыми неявными операторами преобразования для удобства. Иначе люди могли изменить значение, не изменяя (энергозависимую) ссылку.

public class MyThreadedClass
{
    volatile Box<double> volDouble = 123.45;
}

public class Box<T> where T : struct
{
    private readonly T value;
    public Box(T value) { this.value = value; }
    public T Value {get {return value;}}

    // explicit as nulls are a problem...
    public static explicit operator T(Box<T> box) {
        return box.value; }
    public static implicit operator T?(Box<T> box) {
        return box == null ? new T?() : new T?(box.value); }
    public static implicit operator Box<T>(T value) {
        return new Box<T>(value); }
    public static implicit operator Box<T>(T? value) {
        return value.HasValue ? new Box<T>(value.Value) : null; }
}

Кроме того - блокировка была бы наилучшим вариантом.

5
ответ дан 3 December 2019 в 16:54
поделиться

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

3
ответ дан 3 December 2019 в 16:54
поделиться

Энергозависимая документация - некоторые как введение в заблуждение...

когда в документации MSDN говорится, что она использует самое актуальное значение что это означает??? Я уверен, что в простом значении это не приводит к беспорядку, но что относительно ссылки, как Brian Rasmussen, Вы просто говорите о касательно не фактический экземпляр (и поэтому интересные данные).

С моей точки зрения, использующей энергозависимый, не хорошая идея, и я пошел бы для блокировки, так или иначе эта статья могла бы помочь Вам: http://www.bluebytesoftware.com/blog/PermaLink,guid,dd3aff8a-7f8d-4de6-a2e7-d199662b68f4.aspx

0
ответ дан 3 December 2019 в 16:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: