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 中的 tar 解压
Type at the command prompt tar xvzf file-1.0.tar.gz - tgfo uncompress a gzip tar file (.tgz or .tar. ...
- 开源游戏“2048”IOS移植版
简介: 这个游戏是我在今年(2014/05)课余时闲着无聊做的一个益智类小游戏,总共花了4个工作日才完成,为了游戏的效率,做了很多优化,目前在IE5以上浏览器能够流畅运行,运行时如果屏幕分辨率不兼容, ...
- android Gui系统之SurfaceFlinger(5)---Vsync(2)
9.Vsync第二部分 在上一篇中我们讲到,视图的刷新需要很多步骤, void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); preC ...
- ADO.Net(一)——增、删、改、查
数据访问 对应命名空间:System.Data.SqlClient; SqlConnection:连接对象 SqlCommand:命令对象 SqlDataReader:读取器对象 CommandTex ...
- MongoDB学习笔记——Replica Set副本集
副本集 可以将MongoDB中的副本集看作一组服务器集群由一个主节点和多个副本节点等组成,相对于之前讲到的主从复制提供了故障自动转移的功能 副本集实现数据同步的方式依赖于local数据库中的oplog ...
- 遍历set集合
1.迭代遍历:Set<String> set = new HashSet<String>();Iterator<String> iterator= set.iter ...
- 【hadoop】——修改hadoop FileUtil.java,解决权限检查的问题
在Hadoop Eclipse开发环境搭建这篇文章中,第15.)中提到权限相关的异常,如下: 15/01/30 10:08:17 WARN util.NativeCodeLoader: Unable ...
- java word文档 转 html文件
一.简介 一般word文件后缀有doc.docx两种.docx是office word 2007以及以后版本文档的扩展名:doc是office word 2003文档保存的扩展名.对于这两种格式的wo ...
- python scrapy版 极客学院爬虫V2
python scrapy版 极客学院爬虫V2 1 基本技术 使用scrapy 2 这个爬虫的难点是 Request中的headers和cookies 尝试过好多次才成功(模拟登录),否则只能抓免费课 ...
- 使用Hive或Impala执行SQL语句,对存储在Elasticsearch中的数据操作(二)
CSSDesk body { background-color: #2574b0; } /*! zybuluo */ article,aside,details,figcaption,figure,f ...