0

DBBoolC#での実装を探す場合、返されるときに新しいオーバーロードされた演算子(論理演算子、、)はほとんどありません|。それは必要ではなく、メモリのわずかな浪費だと思います。DBBoolは構造体であり、メソッドに渡されるときにコピーが作成されるため、その理由はありません。&!

// Logical negation operator. Returns True if the operand is False, Null 
// if the operand is Null, or False if the operand is True. 
public static DBBool operator !(DBBool x)
{
    return new DBBool(-x.value);
}
// Logical AND operator. Returns False if either operand is False, 
// Null if either operand is Null, otherwise True. 
public static DBBool operator &(DBBool x, DBBool y)
{
    return new DBBool(x.value < y.value ? x.value : y.value);
}
// Logical OR operator. Returns True if either operand is True,  
// Null if either operand is Null, otherwise False. 
public static DBBool operator |(DBBool x, DBBool y)
{
    return new DBBool(x.value > y.value ? x.value : y.value);
}

これは、新しいことなくこのようにする必要があります。

public static DBBool operator !(DBBool x)
{
    if (x.value > 0) return False;
    if (x.value < 0) return True;
    return Null;
}
public static DBBool operator &(DBBool x, DBBool y)
{
    return x.value < y.value ? x : y;
}
public static DBBool operator |(DBBool x, DBBool y)
{
    return x.value > y.value ? x : y;
}
4

1 に答える 1

4
  1. これは構造体であるため、「new」は実際には「スタック上の値を初期化する」ことを意味します。これは安価であり、新しいオブジェクトと同じではありません。
  2. ほとんどの構造体は不変です。これもそうだと思います。したがって、パラメータ値を変更してそれを返すことはできません。新しい値を目的の内容で初期化する必要があります。
于 2012-08-22T22:22:16.100 に答える