C#一元运算重载的深入理解
using System;
using System.Diagnostics;
using System.Text;
using System.Collections;
using System.Collections.Generic;
delegate string DTE(int x, string s); class MYTestX
{
public class CDT
{
public CDT(int x)
{
this.x = x;
}
int x = ; //类型转换只能是public static implicit形式或public static explicit形式
//,这里的implicit与explicit并不是返回值类型,而是修饰符,说明是隐式转换还是显式转换
//因此不能写成public static bool operator bool(CDT odt)这样的形式,编译会出错
//应用场景
//1: CDT ot = new CDT(); if(ot){}
//2: CDT ot = new CDT(); bool b = ot;
public static implicit operator bool(CDT odt)
{
Console.WriteLine("operator bool------------------"); return odt != null;
}
//应用场景:
//CDT ot = new CDT(); string s = (string) ot
public static explicit operator string(CDT odt)
{
Console.WriteLine("operator string------------------");
return odt.ToString();
}
//应用场景:
//CDT ot = new CDT(); string s = ot
public static implicit operator int(CDT odt)
{
Console.WriteLine("operator string------------------");
return odt.x;
} //重载 true false运算符(注意的MSDN文档说明中说true和false是运算符,就像 +,-普通运算符一样)
//两者必须一起重载。其实就相当于重载一个bool运算符的效果, 并不完全等价
//应用场景:
//CDT ot = new CDT(); if(ot){}
//不能用于: CDT ot = new CDT(); bool b = ot; bool b2 = (bool)ot;
public static bool operator true(CDT odt){ return odt != null;
}
public static bool operator false(CDT odt)
{ return odt == null;
}
}
class CDTX { } //public void TestLimitX(CDTX ot)//编译错误:CDTX的访问权限不能小于TestLimitX的访问权限
//{
//}
public static void TestLimit(CDT ot)//可以访问
{
if (ot) { }//调用operator ture
bool b = ot;//调用operator bool,若无此重载,则编译错误,并不会调用operator ture 或ooperator false
string st = (string)ot; //可以转换,调用重载的显示的string转换运算符
CDTX otx = new CDTX();
//string stx = (string)otx; //编译出错,不能转换
Console.WriteLine(b);
}
static void Main(string[] args)
{
TestLimit(new CDT());
} }
C#一元运算重载的深入理解的更多相关文章
- c++学习笔记之函数重载和模板理解
		
1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...
 - 17.C#类型判断和重载决策(九章9.4)
		
今天来结束第九章,聊下我们经常忽略,但是编译器会帮我们完成的"类型判断和重载决策",理解编译器如何帮我们完成,相信在写代码时会更明确,避免一些编译出错,排查的问题,让我们开发更给力 ...
 - C++学习笔记之模板(1)——从函数重载到函数模板
		
一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...
 - 探索Scala(1)-- 运算符重载
		
Scala语言运算符重载全然是语法层面的小把戏,本文记录我对Scala语言运算符重载的一些理解. 方法调用语法糖 调用方法时,Scala同意省略点号和圆括号,如以下代码所看到的: 把运算符映射成单词 ...
 - java为什么不能根据返回值重载?
		
我以前对Java中为什么不能根据返回值进行重载,而只能根据方法的参数进行重载非常不理解.比如void f(){}和int f(){},虽然他们有同样的名字,但是很容易区分.如果我这样做,肯定是没问题的 ...
 - java重载(实现同一方法名,不同参数)
		
背景: 前几天写连接数据库时,因为要执行sql,有的是指向得到所有的执行结果,有的是想根据执行结果获得某一个字段的结果.这时我想通过同一个方法名,不同的参数,获得不同的结果.结果发现java的方法竟 ...
 - js重载的实现
		
在JavaScript高级程序设计书中看到 ECMAScript函数中不能想传统意义上那样实现重载.而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参 数的类型和数 ...
 - 浅谈C++运算符重载
		
首先,什么是运算符重载? C++里运算符重载主要有两种方法.一是通过类的成员函数进行重载,二是通过类的友元函数进行重载. 下面以简单的复数类complex为例: 下面是通过类的成员函数进行运算符的重载 ...
 - 在js中arguments对象的理解
		
一.在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二.arguments 对象 arguments 对象实际上是所在函数的一个内置类数 ...
 
随机推荐
- linux 学习随笔-磁盘管理
			
1:df 用于查看已挂载磁盘的容量信息 -i 查看inodes使用情况 -h 以合适的单位显示 -k -m 分别以k M单位显示 2:du 查看某个文件或者目录占用的空间 du [-abckmsh] ...
 - jstack简单使用,定位死循环、线程阻塞、死锁等问题
			
当我们运行java程序时,发现程序不动,但又不知道是哪里出问题时,可以使用JDK自带的jstack工具去定位: 废话不说,直接上例子吧,在window平台上的: 死循环 写个死循环的程序如下: pac ...
 - SSH新学
			
流程:model-->dao-->service-->impService-->action 如果只是操作单个的一个表,比如user表,则都写到user的流程中 如果要操作俩个 ...
 - OSGI.NET 框架浅析
			
关于osgi.net ,想必大家也听说过,以下是自己在学习osgi.net 过程中整理出来的内容,供大家学习参与使用. 1. UIOSP 开放工厂框架架构 开放工厂所有插件基于OSGi.NET面向服 ...
 - Mongodb Manual阅读笔记:CH6 聚合
			
6 聚合 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
 - 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作
			
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...
 - LNMP+zabbix分布式监控搭建及版本升级
			
LNMP+zabbix分布式监控搭建需要组件:gcc gcc-c++ openssl* pcre pcre-devel gd gd-devel libjpeg-devel libpng-devel l ...
 - [转]nopcommerce商城系统--如何编写一个插件
			
本文转自:http://www.cnblogs.com/ganqiyin/p/3680771.html 原址:http://www.nopcommerce.com/docs/77/how-to-wri ...
 - 【温故而知新-Javascript】使用canvas元素(第一部分)
			
1. 开始使用 canvas 元素 canvas 元素非常简单,这是指它所有的功能都体现在一个JavaScript对象上,因此该元素本身只有两个属性:width 和 height. canvas 元素 ...
 - 三维网格去噪算法(two-step framework)
			
基于两步法的网格去噪算法顾名思义包含两个步骤:首先对网格表面的法向进行滤波,得到调整后的网格法向信息,然后根据调整后的法向更新顶点坐标位置,下面介绍三篇该类型的文章. [Sun et al. 2007 ...