using System;
public struct DBBool
{
  public static readonly True = new DBBool(1);
  public static readonly False = new DBBool(-1);
  public static readonly Null = new DBBool(0);  private sbyte value;  private DBBool(int val) { value = val; }  public static implicit operator DBBool(bool x)
   {
      return x ? True : False; 
   }  public static explicit operator bool(DBBool x)
   {
      return x.value > 0; 
   }  public static DBBool operator &(DBBool x , DBBool y)
   {
      return new DBBool(//...); 
   }  public static DBBool operator |(DBBool x , DBBool y)
   {
      return new DBBool(//...);
   }  public static bool operator true(DBBool x)
   {
      return x.value > 0;
   }  public static bool operator false(DBBool x)
   {
      return x.value < 0; //这里出现了问题 
   }
  
   public static DBBool operator !(DBBool x)
    {
       return new DBBool(-x.value);
    }
}public class Test
{
   static void Main()
    {
       DBBool blTrue = true;
       DBBool blFalse = false;       if(blTrue) //(1)
        Console.WriteLine("OK"); //可以执行.
       if(blFalse) //(2)
        Console.WriteLine("OK");  //为什么这里不能执行?       if(!blFalse) //(3)
        Console.WriteLine("OK"); //可以执行.
    }
}(2)在进行if判断时,本来在底层的false运算符内部原以为可以返回true呢?
但是从实际测试后角度出发,预期效果感觉不是按照定义的那样执行结果!
由于重载了运算符"!",从(3)if判断中又可以正常执行,所以使我更加糊涂了!
  在(2)中重载的false运算符执行了吗?那么为什么不能返回true呀?
  请详细回答!!!!!!!

解决方案 »

  1.   

    一,DBBool blFalse = false; 
    这个赋值,导致对象内部的 value 成了-1
    二,if(blFalse)
    这个导致运算 bool operator false 被调用。
    所以呢,就返回 假了。
      

  2.   

    @dengxm:
    如果说DBBool blFalse = false;
    致使内部的value = -1;
    在进行if判断调用了false运算符,那么返回值为什么不是true呢?
    public static bool operator false(DBBool x)
    {
       return x.value < 0;  //此时value的值为-1.
    }请高手指点!
      

  3.   

    正好前几天回答了一个类似的问题。
    http://topic.csdn.net/u/20100228/22/e02e2be9-47f5-42f4-ae88-fefcb8c94180.html
      

  4.   

    @leafold:
    感谢您提供的线索,通过看了其中的精彩解答.才实际明白调用重载的true,false运算符的时机。