struct Digit
{
byte value; public Digit(byte value)
{
if (value > 9) throw new ArgumentException();
this.value = value;
} public static implicit operator byte(Digit d)
{
Console.WriteLine("Conversion occured");
return (byte)((int)d.value + 1);
}
} class app
{
static void Main()
{
Digit d = new Digit(5);
byte b = d;
Console.WriteLine(d == b);
Console.WriteLine(d.Equlas(b));
}
}结果是什么呢?为什么?
{
byte value; public Digit(byte value)
{
if (value > 9) throw new ArgumentException();
this.value = value;
} public static implicit operator byte(Digit d)
{
Console.WriteLine("Conversion occured");
return (byte)((int)d.value + 1);
}
} class app
{
static void Main()
{
Digit d = new Digit(5);
byte b = d;
Console.WriteLine(d == b);
Console.WriteLine(d.Equlas(b));
}
}结果是什么呢?为什么?
解决方案 »
- 请教关于注册码的算法?
- da.Completed += (o1, e1) =>{ int i=0}; 什么语法?
- 【online】winform的textbox和statusstip问题
- 母版页错误
- 我的一个多线程中调用某个方法就会出错,但在线程外是正常的的
- 想在另一个窗体中,将登陆窗体中的textbox的信息插入到数据库中,该怎么做?
- ComboBox级联的问题在线等回答?
- 关于表格的问题,只有这么多分了,帮帮忙!
- 關於 Event.__inlineSubmit
- Button_click中调用ajax,点击之后没有反应,求助!!!
- 怎么把一个list转成string数组
- 关于.net技术代码的保护,希望引起各位.net技术人员的关注
false 值比较
◎mademelaugh(五朝臣子) 还是不对,如果是比较值,那么d是5,b是6,怎么会相等?Equals是false很好理解,关键是==运算符
嗯,关键是这里了,那么这个转换是怎么决定的呢?为什么是从Digit转换到byte,而不是从byte转换到Digit?是不是因为只定义了从Digit到byte的隐式转换?
public static implicit operator Digit(byte b)
{
return new Digit(b);
}
d == b 是值的直接比较d.Equlas(b)执行了下面一段
public static implicit operator byte(Digit d)
{
Console.WriteLine("Conversion occured");
return (byte)((int)d.value + 1);
}
此时d的值为6
Console.WriteLine(d == b); //由于隐式转换,取到的左操作数为6,d本身值仍是不变的
Console.WriteLine(d.Equlas(b));//Equals方法根本不需要转换类型,因此是5和6比,自然为false
具体专换规则你可以找一下相关资料
Conversion occured
True
False
public static explicit operator byte(Digit d)编译器会报告错误。