如果您在C#中查找DBBool
实现,则在返回时会发现一些重载运算符(逻辑运算符|
、&
、!
)是新的。我认为这是没有必要的,也是对记忆的小小浪费。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;
}
- 它是一个结构,所以"new"实际上意味着"初始化堆栈上的值"——这很便宜,与新对象不同
- 大多数结构是不可变的;我猜这也是;因此,它不能只是改变参数值并返回它——它必须用所需的内容初始化一个新值