C#运算符资料
①public static 返回类型 operator ?(单形参)
②public static 返回类型 operator ?(双形参)
③public static implicit operator 隐转目标类型(单源类型形参)
④public static explicit operator 显转目标类型(单源类型形参)
△全部都是传值,故不可用ref和out参数
△全部都是static
△比较运算符的重载必须贯彻成对一起定义的原则来实现C#的一站式编码
△true()和false()也是运算符,分别表示 非(假/空)吗 和 非(真/空)吗
☆可重载的运算符以及解决方法可行性表(摘自vs.n中文正式版帮助):--------------------------------
运算符 可重载性
+, -, !, ~, ++, --, true(), false() 可以重载这些一元运算符。
+, -, *, /, %, &, | , ^, <<, >> 可以重载这些二进制运算符。
==, !=, <, >, <=, >= 可以重载这些比较运算符(但必须成对重载)。
&&, || 不能重载条件逻辑运算符,但可使用 & 和 | 对其进行计算,可以重载 & 和 |;请参阅 7.11.2 用户定义的条件逻辑运算符。
[] 不能重载数组索引运算符,但可定义索引器。
() 不能重载转换运算符,但可定义新的转换运算符(请参阅 explicit 和 implicit)。
+=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
不能重载赋值运算符,但例外的是可使用 +(该运算符可被重载)计算 +=。
=, ., ?:, ->, New, is, sizeof(), TypeOf()
不能重载这些运算符。
☆一些散题:-------------------------------------
①传递对象引用是传值的一种,不属于传址.因为对象的值只是实体的地址,如果传对象变量的地址才算是传址
②readonly比const宽松,因为也可以在构造器中赋值,此外【static readonly】<=>【const】
③using简化书写的其中一个功能就是创建〖姓或类型〗的别名,可减少修改
④using(IDispose化的对象〖,....〗){ }语句可以确保句尾调用对象.Dispose()
⑤代码和注释是最好的心得!
☆以下是C#运算符重载以及其他技巧的简单例子(摘自vs.n中文正式版帮助)--------------------------------
//版权所有 (C) 2000 Microsoft Corporation。保留所有权利。
// dbbool.cs
using System;
public struct DBBool
{
// 3 个可能的 DBBool 值:
public static readonly DBBool dbNull = new DBBool(0);
public static readonly DBBool dbFalse = new DBBool(-1);
public static readonly DBBool dbTrue = new DBBool(1);
// 为 dbFalse、dbNull、dbTrue 存储 -1、0、1 的私有字段:
int value;
// 私有构造函数。值参数必须为 -1、0 或 1:
DBBool(int value)
{
this.value = value;
}
// 从 bool 到 DBBool 的隐式转换。将 true 映射为
// DBBool.dbTrue,并将 false 映射为 DBBool.dbFalse:
public static implicit operator DBBool(bool x)
{
return x? dbTrue: dbFalse;
}
// 从 DBBool 到 bool 的显式转换。如果
// 给定的 DBBool 为 dbNull,则引发异常,否则返回
// true 或 false:
public static explicit operator bool(DBBool x)
{
if (x.value == 0) throw new InvalidOperationException();
return x.value > 0;
}
// 相等运算符。如果任何一个操作数为 dbNull,则返回 dbNull,
// 否则返回 dbTrue 或 dbFalse:
public static DBBool operator ==(DBBool x, DBBool y)
{
if (x.value == 0 || y.value == 0) return dbNull;
return x.value == y.value? dbTrue: dbFalse;
}
// 不等运算符。如果任何一个操作数为
// dbNull,则返回 dbNull,否则返回 dbTrue 或 dbFalse:
public static DBBool operator !=(DBBool x, DBBool y)
{
if (x.value == 0 || y.value == 0) return dbNull;
return x.value != y.value? dbTrue: dbFalse;
}
// 逻辑非运算符。如果操作数为
// dbFalse,则返回 dbTrue,如果操作数为 dbNull,则返回 dbNull,如果
// 操作数为 dbTrue,则返回 dbFalse:
public static DBBool operator !(DBBool x)
{
return new DBBool(-x.value);
}
// 逻辑 AND 运算符。如果任何一个操作数为
// dbFalse,则返回 dbFalse,如果任何一个操作数为 dbNull,则返回 dbNull,否则返回 dbTrue:
public static DBBool operator &(DBBool x, DBBool y)
{
return new DBBool(x.value < y.value? x.value: y.value);
}
// 逻辑 OR 运算符。如果任何一个操作数为
// dbTrue,则返回 dbTrue,如果任何一个操作数为 dbNull,则返回 dbNull,否则返回 dbFalse:
public static DBBool operator |(DBBool x, DBBool y)
{
return new DBBool(x.value > y.value? x.value: y.value);
}
// 绝对真运算符。如果操作数为
// dbTrue,则返回 true,否则返回 false:
public static bool operator true(DBBool x)
{
return x.value > 0;
}
// 绝对假运算符。如果操作数为
// dbFalse,则返回 true,否则返回 false:
public static bool operator false(DBBool x)
{
return x.value < 0;
}
// 重载从 DBBool 到 string 的转换:
public static implicit operator string(DBBool x)
{
return x.value > 0 ? "dbTrue"
: x.value < 0 ? "dbFalse"
: "dbNull";
}
// 重写 Object.Equals(object o) 方法:
public override bool Equals(object o)
{
try
{
return (bool) (this == (DBBool) o);
}
catch
{
return false;
}
}
// 重写 Object.GetHashCode() 方法:
public override int GetHashCode()
{
return value;
}
// 重写 ToString 方法以便将 DBBool 转换为 string:
public override string ToString()
{
switch (value)
{
case -1:
return "DBBool.False";
case 0:
return "DBBool.Null";
case 1:
return "DBBool.True";
default:
throw new InvalidOperationException();
}
}
}
class Test
{
static void Main()
{
DBBool a, b;
a = DBBool.dbTrue;
b = DBBool.dbNull;
Console.WriteLine( "!{0} = {1}", a, !a);
Console.WriteLine( "!{0} = {1}", b, !b);
Console.WriteLine( "{0} & {1} = {2}", a, b, a & b);
Console.WriteLine( "{0} | {1} = {2}", a, b, a | b);
// 调用真运算符以确定 DBBool 变量的
// 布尔值:
if (b)
Console.WriteLine("b is definitely true");
else
Console.WriteLine("b is not definitely true");
}
}
相关文章:

厉害了,网易伏羲三篇论文上榜 AI 顶会 ACL
近日,国际AI顶尖学术会议ACL 2021(Annual Meeting of the Associationfor Computational Linguistics)公布了论文录用结果。网易伏羲共有三项研究被本届ACL收录,内容包括自然语言生成、无监督文本表示学习等方向,相关技…
软件架构设计学习总结(1):标准Web系统的架构分层
1、架构体系分层图 在上图中我们描述了Web系统架构中的组成部分。并且给出了每一层常用的技术组件/服务实现。需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层的技术都需要使用。例如:一些简单的CRM系统可能在产…

iOS 设置UILabel 的内边距
iOS 设置UILabel 的内边距 - (void)drawTextInRect:(CGRect)rect {UIEdgeInsets insets {0, 5, 0, 5};[super drawTextInRect:UIEdgeInsetsInsetRect(rect, insets)]; } 参考:http://stackoverflow.com/questions/3476646/uilabel-text-margin http://unmi.cc/uila…

从程序媛到启明星辰集团云安全总经理,郭春梅博士揭秘云时代安全攻防之道...
从无序中寻找踪迹,从眼前事探索未来。2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

javascript 异步实现方案
1、回调函数 fn1( fn2 ); 2、事件监听 fn1.on(done, fn2);function fn1() {setTimeout(function(){fn1.trigger(done);},1000) }3、发布-订阅 (1)fn2像“信号中心”订阅了done信号Jquery.subscribe("done", fn2);(2) fn1向信号中心发布信…

csc命令帮助
大家还是要常用用csc,个人感觉有时vs有不少不太方便的东西。C:/>csc /help |more Microsoft (R) Visual C# 编译器版本7.00.9254 [CLR version v1.0.2914] 版权所有 (C) Microsoft Corp 2000-2001。保留所有权利。 Visual C# 编译器选项…

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(三)(网内首发超详细版)...
3.3 权限配置样例注意:* 权限配置文件中出现的用户名必须已在用户配置文件中定义。* 对权限配置文件的修改立即生效,不必重启svn。用户组格式:[groups] ,其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。版本库…

Java知识全面总结:并发编程+JVM+设计模式+常用框架+....
本文整理的Java知识体系主要包括基础知识,工具,并发编程,数据结构与算法,数据库,JVM,架构设计,应用框架,中间件,微服务架构,分布式架构等内容。同时也有作为程…

JPA主键生成策略
GeneratedValue: 为一个实体类生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键)。它有两个属性,分别是strategy和generator。 generator:默认为空字符串,它定义了主键生成器的名称,对应的生成器…

Silverlight 预定义颜色速查表
预定义颜色可以使用 SolidColorBrush 绘制,它使用预定义纯色。这可以是 Colors 的静态属性 (Property) 名称,也可以是指定为 XAML 属性 (Attribute) 值时直接作为字符串处理的另外一组颜色名称中的一个。有关已命名颜色表以及如何在代码中指定已命名颜色…

腾讯云TDSQL-A发布公有云版本 支持第七次全国人口普查等海量数据场景
5月18日,腾讯云发布首款全自研分布式分析型数据库TDSQL-A,全力应对海量数据实时分析需求。 这是腾讯云数据库在品牌升级后的首次新品发布,意味着腾讯云将这种多年积累的经验更加广泛全面地向社会行业开放,助力行业推进数字化进程…

Spring Boot 和 testNG 和 eclipse背景色
通过之前的博文,我们已经验证,Spring环境下完成access数据访问没有问题。下面我们直接在Spring环境下部署我们的升级项目。1.导入Spring BootSpring Boot是Spring的子项目,用来解决项目配置复杂性的问题,降低Spring的使用门槛使得…

免费丨AI内行盛会!2021北京智源大会带你与图灵奖和200+位大牛一起共话AI
数据在爆炸,AI在茁壮。从2012到2018年,深度学习模型的计算能力增长了30万倍,早已打破摩尔定律。可以预见的是,未来必然属于超大数据和超大模型,而破纪录的中文预训练生成语言模型智源“悟道2.0”发布在即,A…

LVM创建,缩减及快照备份
管理逻辑卷工具:LVM逻辑卷:灵活可动态存储的一种逻辑上的存储最底层需要通过工具变成“物理卷”:存储设备,Raid ,分区等VG:(1)底层设备容量之和。(2)PE大小*数量卷组上面…

前端 排序算法总结
前言 排序算法可能是你学编程第一个学习的算法,还记得冒泡吗? 当然,排序和查找两类算法是面试的热门选项。如果你是一个会写快排的程序猿,面试官在比较你和一个连快排都不会写的人的时候,会优先选择你的。那么…

django 快速实现登录
前言 对于web开来说,用户登陆、注册、文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性;对于web应用来说&…

“云智一体”的全场景智能视频技术是什么?
全视频时代到来,各行各业对视频的应用、体验和效能提出全新升级需求,AI与云计算的发展则为智能视频进入新阶段注入充足动力。5月13日,百度智能云“云智技术论坛-智能视频专场”活动在北京举行,重磅发布了智能视频云3.0全景图。百度…

背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue...
原文:背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue[源码下载] 背水一战 Windows 10 (18) - 绑定: 与 Element 绑定, 与 Indexer 绑定, TargetNullValue, FallbackValue作者:webabcd介绍背水一战 Windows 10…

2-sat问题,输出方案,几种方法(赵爽的论文染色解法+其完全改进版)浅析 / POJ3683...
本文原创于 2014-02-12 09:26。 今复习之用,有新体会,故重新编辑。 2014-02-12 09:26: 2-sat之第二斩!昨天看了半天论文(赵爽的和俉昱的),终于看明白了!好激动有木有!终…

C#方法/函数
本节课向你介绍C#的方法,其目的是: 1.了解方法的结构格式2.了解静态和实例方法之间的区别3.学会实例对象的使用4.学会如何调用实例化的对象5.学会方法的四种参数类型的使用6.学会使用"this"引用以往,对于每个程序来说,所…

Python 的一万种用法:生成字符视频
作者 | ZackSock来源 | 新建文件夹X头图 | 下载于视觉中国前言在之前也写过生成字符视频的文章,但是使用的是命令行窗口输出,效果不是很好,而且存在卡顿的情况。于是我打算直接生成一个mp4的字符视频。大致思路和之前一样:Python2…

Codeforces 862B - Mahmoud and Ehab and the bipartiteness
862B - Mahmoud and Ehab and the bipartiteness 思路:先染色,然后找一种颜色dfs遍历每一个点求答案。 代码: #include<bits/stdc.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,si…

C#表达式,类型和变量
本节课将介绍C# 语言的表达式,类型和变量。本节课要达到如下几个目的: 1.了解什么是"变量"2.学习C#的简单类型3.对C#表达式有个初步的了解4.了解什么是String类型5.学习如何使用数组"变量"仅仅是数据的存储位置。你可以把数据存放到…

张一鸣卸任CEO,立下10年之约,期望突破线性延伸
整理 | 寇雪芹头图 | 下载于视觉中国出品 | AI 科技大本营(ID:rgznai100)5月20日,字节跳动创始人张一鸣发布内部全员信,宣布卸任CEO,联合创始人梁汝波将接任这一职位。张一鸣在全员信中表示,“我决定卸任CE…

【译】使用Kotlin和RxJava测试MVP架构的完整示例 - 第1部分
原文链接:android.jlelse.eu/complete-ex… 最近我创建了一个playground项目来了解更多关于Kotlin和RxJava的信息。 这是一个非常简单的项目,但有一部分,我进行了一些尝试:测试。 在kotlin的测试上可能会有一些陷阱,而…

智能改变未来,创新引领世界,第二届深圳国际人工智能展暨智能制造创新高峰论坛盛大启幕!
2021年5月20日,由深圳市科学技术协会、深圳市商务局、深圳市福田区人民政府共同指导,深圳市科技开发交流中心、深圳市人工智能行业协会联合主办的2021第二届深圳国际人工智能展开幕式暨智能制造创新高峰论坛在深圳会展中心(福田)启…

C#循环控制语句
本节课将介绍如何使用C#控制语句中的循环语句,本课目的如下: 1.学会"while"循环的用法。2.学会"do" 循环的用法。3.学会"for" 循环的用法。4.学会foreach循环的用法。5.进一步了解"break"语句的用法。6.如何使用…

2017-09-22 前端日报
2017-09-22 前端日报 精选 JavaScript 在 V8 中的元素种类及性能优化【译】异步递归:回调、Promise、Async[译]HTML&CSS Lesson5: 定位一个页面阻塞问题的排查过程前端分享之cookie的使用及单点登录An event for CSS position:stickyanvaka/ngraph.path: Path f…

C#选择控制语句
本节课将介绍如何使用C#选择控制语句,第三课将达到如下几个目的: 1.学会"if"语句的用法。2.学会"switch"语句的用法。3.学会在"switch"语句中如何使用"break"语句。4.理解"goto"语句的正确用法。在前…

将博客搬至51CTO
将博客搬至51CTO转载于:https://blog.51cto.com/imace/1540730