Csharp 高级编程 C7.1.2(2)
C#2.0 使用委托推断扩展委托的语法
下面是示例 一个货币结构
代理的方法可以是实例的方法,也可以是静态方法,声明方法不同
实例方法可以使用委托推断,静态方法不可以用
示例代码:
/*
* C#2.0 使用委托推断扩展委托的语法
* 下面是示例 一个货币结构
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace C7._1._2_2
{
//一个货币结构
struct Currency
{
//美元
public uint Dollars;
//美分
public ushort Cents;
//构造函数
public Currency(uint dollars, ushort cents)
{
this.Dollars = dollars;
this.Cents = cents;
}
//重写TOSTRING方法
public override string ToString()
{
return string.Format("${0}.{1,-2:00}", Dollars, Cents);
}
//静态方法
public static string GetCurrencyUnit()
{
return "Dollars";
}
//强制转换float -> Currency
public static explicit operator Currency(float value)
{
checked {
uint dollars = (uint)value;
ushort cents = (ushort)((value - dollars) * );
return new Currency(dollars, cents);
}
}
//隐式转换 Currency -> float
public static implicit operator float(Currency value)
{
return value.Dollars + (value.Cents / 100.0f);
}
//隐式转换 uint -> Currency
public static implicit operator Currency(uint value)
{
return new Currency(value, );
}
//隐式转换 Currency -> uint
public static implicit operator uint(Currency value)
{
return value.Dollars;
}
}
class Program
{
private delegate string GetAString(); static void Main(string[] args)
{
int x = ;
//委托推断 GetAString test = new GetAString(x.ToString); C#2.0以后可以这样
GetAString test = x.ToString;
Console.WriteLine("Get the string is {0}", test()); Currency balance = new Currency(, ); //TEST 指向的是一个实例方法
test = balance.ToString;
Console.WriteLine("Get the string is {0}", test()); //TEST指向的是一个静态方法,注意声明方法不一样,不可以使用委托推断
test = new GetAString(Currency.GetCurrencyUnit);
Console.WriteLine("Get the string is {0}", test()); Console.ReadLine();
}
}
}
Csharp 高级编程 C7.1.2(2)的更多相关文章
- Csharp 高级编程 C7.1.2
第七章 代理(1) 一.代理要声明 二.代理使用步骤 声明代理 初始化代理(使用 实例的方法名 作为参数) 使用代理 代码示例: /*C7.1.2*/ using System; using Syst ...
- 解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2
前言 本篇讲述枚举和名称空间. 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型.使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护. 我们对比枚举的定义和类的定义,会发 ...
- 读《C#高级编程》第1章问题
读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...
- MVC高级编程+C#高级编程
本人今年的目标是学习MVC高级编程和C#高级编程,把自己的基础打的扎实,本文中值是一个开到,定期会在上面记录学习的技术点和心得就,加油吧!!!!!
- 《C#高级编程》读书笔记
<C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...
- jquery插件开发继承了jQuery高级编程思路
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- jQuery高级编程
jquery高级编程1.jquery入门2.Javascript基础3.jQuery核心技术 3.1 jQuery脚本的结构 3.2 非侵扰事JavaScript 3.3 jQuery框架的结构 3. ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- multiple definition of `err_sys' 《UNIX环境高级编程》
本文地址:http://www.cnblogs.com/yhLinux/p/4079930.html 问题描述: [点击此处直接看解决方案] 在练习<UNIX环境高级编程>APUE程序清单 ...
随机推荐
- 关于在css里设置图片圆角的问题
今天做了一个项目,效果图内页的产品图片都是带圆角的,于是前端的做了圆角的效果,div+css是这样的,首先div布局是: <div class="tiandi_item" o ...
- 关于html控件和服务器控件摁回车后提交按钮的问题
今天做项目用到,项目是一个洗车系统,刷卡后在焦点出自动触发回车键事件,如,一个文本框,把焦点放入,刷一下卡,文本框自动获取卡号,同时触发回车事件,(就像银行办卡一样),发现刷卡后页面刷新后并没有执行按 ...
- Swift--控制流与oc不同的地方
1.For-in循环中... for index in 1...5 { print("\(index) times 5 is \(index * 5)") } for _ in 1 ...
- itext poi 学习之旅 (2)创建excel
Computer.java package com.qiang.poi; public class Computer { private int id; private String name; pr ...
- 使用自定义类型做qmap,qhash的key
map在STL中的定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> ...
- C++ 完美破解九宫格(数独)游戏
看到CSDN上有位大神用C#写了一个破解数独的程序(点击打开链接),不过我对C#也不懂,比较喜欢C++,就用标准C++也写了一个,希望各位喜欢.三纯程序,纯控制台程序,纯各人爱好,纯算法程序,无win ...
- LAMP 搭建wordpress部署教程贴.
LAMP 搭建wordpress部署教程贴.这是一篇主要将LAMP,并且通过wordpress来进行验证,演示.如何去部署PHP CMS很多新手看到LAMP就很很头大,觉得很难搞,编译安装,搞了好几天 ...
- js函数的各种写法与调用
以下是我见过的各种js函数的各种写法以及调用,虽然有些写法及其调用我不清楚其专业术语叫啥,但并不影响我写一个总结笔记. 我们刚开始接触js语音,经常看到的这种名叫“使用function关键字来定义函数 ...
- jQuery ajax传递特殊字符串问题
当你用ajax传递值到服务器端,如果值中包含特殊字符串如+,&等,在服务器端获取的结果可能就会出现差异,因为这些字符有其它用途,如“+”表示连接符,在转义后你获取到的就是空格.可以看看这些特殊 ...
- python文件_读取
1.文件的读取和显示 方法1: f=open(r'G:\2.txt') print f.read() f.close() 方法2: try: t=open(r'G:\2.txt') print t.r ...