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#一元运算重载的深入理解的更多相关文章

  1. c++学习笔记之函数重载和模板理解

    1.函数重载: C++ 不允许变量重名,但是允许多个函数取相同的名字,只要参数表不同即可,这叫作函数的重载(其英文是 overload).重载就是装载多种东西的意思,即同一个事物能完成不同功能. 所谓 ...

  2. 17.C#类型判断和重载决策(九章9.4)

    今天来结束第九章,聊下我们经常忽略,但是编译器会帮我们完成的"类型判断和重载决策",理解编译器如何帮我们完成,相信在写代码时会更明确,避免一些编译出错,排查的问题,让我们开发更给力 ...

  3. C++学习笔记之模板(1)——从函数重载到函数模板

    一.函数重载 因为函数重载比较容易理解,并且非常有助于我们理解函数模板的意义,所以这里我们先来用一个经典的例子展示为什么要使用函数重载,这比读文字定义有效的多. 现在我们编写一个交换两个int变量值得 ...

  4. 探索Scala(1)-- 运算符重载

    Scala语言运算符重载全然是语法层面的小把戏,本文记录我对Scala语言运算符重载的一些理解. 方法调用语法糖 调用方法时,Scala同意省略点号和圆括号,如以下代码所看到的: 把运算符映射成单词 ...

  5. java为什么不能根据返回值重载?

    我以前对Java中为什么不能根据返回值进行重载,而只能根据方法的参数进行重载非常不理解.比如void f(){}和int f(){},虽然他们有同样的名字,但是很容易区分.如果我这样做,肯定是没问题的 ...

  6. java重载(实现同一方法名,不同参数)

    背景:  前几天写连接数据库时,因为要执行sql,有的是指向得到所有的执行结果,有的是想根据执行结果获得某一个字段的结果.这时我想通过同一个方法名,不同的参数,获得不同的结果.结果发现java的方法竟 ...

  7. js重载的实现

    在JavaScript高级程序设计书中看到 ECMAScript函数中不能想传统意义上那样实现重载.而在其他语句中(Java)中,可以为一个函数编写两个定义,只要两个定义的签名(接受的参 数的类型和数 ...

  8. 浅谈C++运算符重载

    首先,什么是运算符重载? C++里运算符重载主要有两种方法.一是通过类的成员函数进行重载,二是通过类的友元函数进行重载. 下面以简单的复数类complex为例: 下面是通过类的成员函数进行运算符的重载 ...

  9. 在js中arguments对象的理解

    一.在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二.arguments 对象 arguments 对象实际上是所在函数的一个内置类数 ...

随机推荐

  1. eclipse js提醒报错

    在用eclipse开发项目时,有时候导入项目后,报错为 Problem Occurred: Errors occurred during the build.    Errors running bu ...

  2. Thrift 跨服务开发框架

    Thrift概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP,Ruby, Erla ...

  3. Zookeeper 服务注册和发现

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理 ...

  4. mybatis 中#{}与${}的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111&qu ...

  5. centos7安装CDH5.5.0

    1.安装jdk mkdir -p /usr/java tar zxvf jdk-7u80-linux-x64.tar.gz -C /usr/java/ vi /etc/profile export J ...

  6. Java查询大文本

    但JAVA本身缺少相应的类库,需要硬编码才能实现结构化文件计算,代码复杂且可读性差,难以实现高效的并行处理. 使用免费的集算器可以弥补这一不足.集算器封装了丰富的结构化文件读写和游标计算函数,书写简单 ...

  7. Linux下NDK编译FFMPEG包含neon参数

    FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...

  8. 如何在Chrome39添加360抢票王插件

    前言: 版本:Chrome 39.0.2171.95 m CRX文件来源:ext.se.360.cn 本文地址:http://www.cnblogs.com/go2bed/p/4206714.html ...

  9. 浏览器默认样式(user agent stylesheet)+cssreset

    每种浏览器都有一套默认的样式表,即user agent stylesheet,在写网页时,没有指定的样式,按浏览器内置的样式表来渲染.这是合理的,像word中也有一些预留样式,可以让我们的排版更美观整 ...

  10. [转]pyhon之Tkinter实例化学习

    本文转自:http://www.cnblogs.com/kaituorensheng/p/3287652.html 阅读目录 1. 产品介绍 2. 设计规划 3. 相关知识 4. 源码附件 Tkint ...