博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
true运算符和false运算符重载的例子
阅读量:6376 次
发布时间:2019-06-23

本文共 4928 字,大约阅读时间需要 16 分钟。

从微软官网找到的例子。

true false重载
1 // dbbool.cs  2 using System;  3   4 public struct DBBool  5 {  6     // The three possible DBBool values:  7     public static readonly DBBool dbNull = new DBBool(0);  8     public static readonly DBBool dbFalse = new DBBool(-1);  9     public static readonly DBBool dbTrue = new DBBool(1); 10     // Private field that stores -1, 0, 1 for dbFalse, dbNull, dbTrue: 11     int value; 12  13     // Private constructor. The value parameter must be -1, 0, or 1: 14     DBBool(int value) 15     { 16         this.value = value; 17     } 18  19     // Implicit conversion from bool to DBBool. Maps true to  20     // DBBool.dbTrue and false to DBBool.dbFalse: 21     public static implicit operator DBBool(bool x) 22     { 23         return x ? dbTrue : dbFalse; 24     } 25  26     // Explicit conversion from DBBool to bool. Throws an  27     // exception if the given DBBool is dbNull, otherwise returns 28     // true or false: 29     public static explicit operator bool(DBBool x) 30     { 31         if (x.value == 0) throw new InvalidOperationException(); 32         return x.value > 0; 33     } 34  35     // Equality operator. Returns dbNull if either operand is dbNull,  36     // otherwise returns dbTrue or dbFalse: 37     public static DBBool operator ==(DBBool x, DBBool y) 38     { 39         if (x.value == 0 || y.value == 0) return dbNull; 40         return x.value == y.value ? dbTrue : dbFalse; 41     } 42  43     // Inequality operator. Returns dbNull if either operand is 44     // dbNull, otherwise returns dbTrue or dbFalse: 45     public static DBBool operator !=(DBBool x, DBBool y) 46     { 47         if (x.value == 0 || y.value == 0) return dbNull; 48         return x.value != y.value ? dbTrue : dbFalse; 49     } 50  51     // Logical negation operator. Returns dbTrue if the operand is  52     // dbFalse, dbNull if the operand is dbNull, or dbFalse if the 53     // operand is dbTrue: 54     public static DBBool operator !(DBBool x) 55     { 56         return new DBBool(-x.value); 57     } 58  59     // Logical AND operator. Returns dbFalse if either operand is  60     // dbFalse, dbNull if either operand is dbNull, otherwise dbTrue: 61     public static DBBool operator &(DBBool x, DBBool y) 62     { 63         return new DBBool(x.value < y.value ? x.value : y.value); 64     } 65  66     // Logical OR operator. Returns dbTrue if either operand is  67     // dbTrue, dbNull if either operand is dbNull, otherwise dbFalse: 68     public static DBBool operator |(DBBool x, DBBool y) 69     { 70         return new DBBool(x.value > y.value ? x.value : y.value); 71     } 72  73     // Definitely true operator. Returns true if the operand is  74     // dbTrue, false otherwise: 75     public static bool operator true(DBBool x) 76     { 77         return x.value > 0; 78     } 79  80     // Definitely false operator. Returns true if the operand is  81     // dbFalse, false otherwise: 82     public static bool operator false(DBBool x) 83     { 84         return x.value < 0; 85     } 86  87     // Overload the conversion from DBBool to string: 88     public static implicit operator string(DBBool x) 89     { 90         return x.value > 0 ? "dbTrue" 91              : x.value < 0 ? "dbFalse" 92              : "dbNull"; 93     } 94  95     // Override the Object.Equals(object o) method: 96     public override bool Equals(object o) 97     { 98         try 99         {100             return (bool)(this == (DBBool)o);101         }102         catch103         {104             return false;105         }106     }107 108     // Override the Object.GetHashCode() method:109     public override int GetHashCode()110     {111         return value;112     }113 114     // Override the ToString method to convert DBBool to a string:115     public override string ToString()116     {117         switch (value)118         {119             case -1:120                 return "DBBool.False";121             case 0:122                 return "DBBool.Null";123             case 1:124                 return "DBBool.True";125             default:126                 throw new InvalidOperationException();127         }128     }129 }130 131 class Test132 {133     static void Main()134     {135         DBBool a, b;136         a = DBBool.dbTrue;137         b = DBBool.dbNull;138 139         Console.WriteLine("!{0} = {1}", a, !a);140         Console.WriteLine("!{0} = {1}", b, !b);141         Console.WriteLine("{0} & {1} = {2}", a, b, a & b);142         Console.WriteLine("{0} | {1} = {2}", a, b, a | b);143         // Invoke the true operator to determine the Boolean 144         // value of the DBBool variable:145         if (b)146             Console.WriteLine("b is definitely true");147         else148             Console.WriteLine("b is not definitely true");149     }150 }

其中,在if(b)的时候,调用了public static bool operator true(DBBool x)

很明显,这个重载的用处是可以把这个类型当做真假值来用,和bool型一样了。

 

转载地址:http://zwxqa.baihongyu.com/

你可能感兴趣的文章
JS基础——修改文本框的值(函数传参)
查看>>
python学习===从一个数中分解出每个数字
查看>>
python基础===100盏灯的问题
查看>>
Leetcode 6. ZigZag Conversion
查看>>
poj3275
查看>>
数据库 字符串连接函数
查看>>
bzoj2002
查看>>
《转》Pragma: no-cache 对性能的影响
查看>>
基于 OSGi 的面向服务的组件编程,helloworld
查看>>
StoryBoard - Segue 简单笔记
查看>>
容器ConcurrentHashMap原理(学习)
查看>>
pl/sql程序块
查看>>
L122
查看>>
iOS中如何使cocoapods管理第三方库
查看>>
<%%>,<%:%> <%=%>的区别及使用(转载)
查看>>
2017四川省赛E题( Longest Increasing Subsequence)
查看>>
创建对象为什么要 init?
查看>>
个人收集:(转)display:inline-block
查看>>
nodejs+MQTT协议实现远程主机控制
查看>>
jQuery prop方法
查看>>