代码如下:
public string Name
{
get { return _name; }
set
{
if( value!= null && value.Length > 10)
throw new ArgumentOutOfRangeException("Invalid value for Name", value, value.ToString());
_isChanged |= (_name != value);
_name = value;
}
}此处为什么要这样写呢?_isChanged |= (_name != value);
直接给_name = value;就可以了么,为什么要在前一段加入_isChanged |= (_name != value);呢?
public string Name
{
get { return _name; }
set
{
if( value!= null && value.Length > 10)
throw new ArgumentOutOfRangeException("Invalid value for Name", value, value.ToString());
_isChanged |= (_name != value);
_name = value;
}
}此处为什么要这样写呢?_isChanged |= (_name != value);
直接给_name = value;就可以了么,为什么要在前一段加入_isChanged |= (_name != value);呢?
解决方案 »
- 想实现当用户输入一串字母后弹出一个窗口,用于后台配置,用什么方法检测用户任意时刻输入一串字母
- FileStream 未能找到路径
- DataGridView数据输入处理 急!!
- 关于dateTimePicker的几个问题?在线急等啊
- 急 高分求解:关于两窗体之间的的参数传递
- 如何实现鼠标右键点击TabControl的标签页时也能切换到该标签页?
- ListBox的问题,垂直滚动条!!!
- 请帮我看看!在绑定时,我想只在指定列中判断是否符合某个条件,把台所在的单元格改成别的颜色!
- C#开发的dll在win2000+asp+.net1.1平台上的错误!
- 怎样读取Excel文件中的数据
- 求C# 写的A*算法,最好有示例源码。
- 图片上传问题请指教~!
C# 运算符 | 7.13 赋值运算符
“或”赋值运算符。lhs |= expr
其中: lhs
存储位置、属性或索引器。
expr
一个表达式。
备注
表达式使用 | = 赋值运算符,如x |= y
等效于x = x | y
不同的是 x 只被计算一次。| 运算符对整型操作数执行按位“或”操作,对布尔操作数执行逻辑“或”操作。| = 运算符不能被直接重载,但用户定义的类型可重载 | 运算符(请参见 operator)。示例
// cs_operator_or_assignment.cs
using System;
class Test
{
public static void Main()
{
int a = 0x0c;
a |= 0x06;
Console.WriteLine("0x{0:x8}", a);
bool b = true;
b |= false;
Console.WriteLine(b);
}
}
输出
0x0000000e
True但是我没有明白为什么这样写
等效于
x = x ¦ y _isChanged ¦= (_name != value); 其实就是给_isChanged赋值而已。
-------------------
为属性Name赋值时...如果新值与原值不同则将bool变量_isChanged置为true否则保持_isChanged原值..._isChanged也是个属性变量...这就是属性的好处...可以在赋值时进行逻辑处理...
==================================================================
不同意这种说法,虽然源代码看起来好像不错,可编译后的IL代码是一样的。根本不会有任何效率提升。
然后把结果与isChange做| 或 运算,结果付给isChange
==================================================================
不同意这种说法,虽然源代码看起来好像不错,可编译后的IL代码是一样的。根本不会有任何效率提升。----------------------------------------------------------------------------------------
有效率提升,少打一个x~~以前C里面写C+=2编译后肯定是比C=C+2效率要高的,因为前者编译成汇编以后好像是mov 一下就OK了,但是后者不是这样的,貌似要压栈还是啥的,对汇编不懂,那位来解释一下。C#现在不是这样了?
x |= y
is equivalent tox = x | y
except that x is only evaluated once.
====================MSDN=========================only evaluated once...MSDN的官方解释...我也看过IL Code...确实是一样的...不过微软这么说应该有它的含义...