C#学习入门
来源:互联网 发布:国家中级程序员证书 编辑:程序博客网 时间:2024/06/12 06:25
DateTime:
转自
http://www.cnblogs.com/artech/archive/2010/09/04/1817833.html
String.Fromat();
String.Format(String,Object);String.Format(String,Object[])将格式项替换为指定Object的实例项
String.Format(String,Object,Object)
String.Format(String,Object,Object,Obect); 把String中的格式项替换成多个Object实例
1 字符串类型的数字
string str1=string.Format(“{0:N1}”,56789);// 56,789.0
string str2=string.Format(“{0:N2}”,56789);//56,789.00
string str3=string.Format(“{0:F1}”,56789);//56789.0
string str4=string.Format(“{0:F2}”,56789);//56789.00
string str5=(56789/100.0).ToString(“#.##”);//567.89
string str6=(56789/100).ToString(“#.##”);//567
2 格式化货币
string.Format(“{0:C}”,0.2);//¥0.20 默认保留两位 C1 保留一位 C2 保留两位
格式化多个Object实例
string.Format(“(市场价::{0:C})”,“优惠价{1:C}”,23.15,19.80);{}内0表示第一个 1 表示第二个Object
3 格式化 十进制 D
string.Format(“{0:D3}”,23);//结果为:023 D2,123333结果为123333(精度说明符指示二结果字符窜中所需的最少数字个数)
4、用分号隔开的数字,并指定小数点后的位数
string.Format(“{0:N}”, 14200) //结果为:14,200.00 (默认为小数点后面两位)
string.Format(“{0:N3}”, 14200.2458) //结果为:14,200.246 (自动四舍五入)
5、格式化百分比
string.Format(“{0:P}”, 0.24583) //结果为:24.58% (默认保留百分的两位小数)
string.Format(“{0:P1}”, 0.24583) //结果为:24.6% (自动四舍五入)
6、零占位符和数字占位符
string.Format(“{0:0000.00}”, 12394.039) //结果为:12394.04
string.Format(“{0:0000.00}”, 194.039) //结果为:0194.04
string.Format(“{0:###.##}”, 12394.039) //结果为:12394.04
string.Format(“{0:####.#}”, 194.039) //结果为:194
7 日期格式化
string.Format(“{0:d}”,System.DateTime.Now) //结果为:2009-3-20 (月份位置不是03)
string.Format(“{0:D}”,System.DateTime.Now) //结果为:2009年3月20日
string.Format(“{0:f}”,System.DateTime.Now) //结果为:2009年3月20日 15:37
string.Format(“{0:F}”,System.DateTime.Now) //结果为:2009年3月20日 15:37:52
string.Format(“{0:g}”,System.DateTime.Now) //结果为:2009-3-20 15:38
string.Format(“{0:G}”,System.DateTime.Now) //结果为:2009-3-20 15:39:27
string.Format(“{0:m}”,System.DateTime.Now) //结果为:3月20日
string.Format(“{0:t}”,System.DateTime.Now) //结果为:15:41
string.Format(“{0:T}”,System.DateTime.Now) //结果为:15:41:50
委托事件
委托: ( delegate) 委托也是一个类 但与类的生明方式有点不同,在编译的时候编译成类。因为delegate是一个 类,所以类存在的地方它都可以存在
常规用法 public delegate void MeetDelegate(string name); private static void EnglishGreeting(string name){Console.WriteLine("Morning"+name)} private static void ChineseGreeting(string name){Console.WriteLine("早上好,"+name);} private static void MeetPeople(string name,MeetDelegate delegate2){delegate2(name);} MeetDelegate MD; MD=EnglishGreeting; MD+=ChineseGreeting; MD-=ChineseGreeting; 此处可以看出委托的用法其实和C++的函数指针如出一辙(不都说 C#就是C++和Java的产物嘛)
事件
思考上面的程序 在同一个类中没有什么实际意义 貌似 ,在实际应用中我们通常把delegate和 chineseGreaeting EnglishGreeting 放在两个不同的类中
public delegate void GreetingDelegate (string name);private static void EnglishGreeting(string name){Console.WriteLine("Morning"+name)}private static void ChineseGreeting(string name){Console.WriteLine("早上好,"+name);}public class GreetingManager{ public GreetingDelegate delegate1; public void GreetPeople(string name,GreetingDelegate delegate2){ delegate2(name);} }static void Main(string[] args){ GreetingManager gm=new GreetingManager(); gm.delegate1=EnglishGreeting; gm.delegate1+=ChineseGreeting; gm.GreetPeople("Jimmy Zhang",gm.delegate1);}输出为: Morning ,Jimmy Zhang 早上好,Jimmy Zhang这里把外部的函数付给委托 然后通过函数外部传递把内存中的委托数据传递到GreetPeople中声明的委托的
由于我们在传递的时候两次使用了delegate1字段 可以修改GreetingManager为:
public class GreetingManager{ public GreetingDelegate delegate1; public void GreetPeople(string name){ if(delegate1!=null){ delegate1(name); } } } 所以我们调用的时候可以: gm.delegate1=EnglistGreeting; gm.delegate1+=ChineseGreeting; gm.GreetPeople("Jimmy Zhang"); 输入:相同 第一个用 = 赋值,是对其进行实例化,第二个方法注册则用 += 。但是不管赋值还是注册,都是将 方法绑定到委托上,除了调用时先后顺序不同,再没任何的区别 所以这里就有事件的雏形了:类和外部分离 解析: 就相当于函数指针 把函数放到指针中 这里放到委托中 然后在类的内部调用该委托指向函数 上方 :函数——>委托1——>委托2——>执行委托2中的函数 下方: 函数——>委托1——>执行委托中的函数
于是我们使用Event,他封装了委托类型的变量,使得在类的内部,不管你声明他是public还是protected
他总是private的,在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明时间时使用的访问符相同
我们改写GreetingManager类,它变成这个样子:
public class GreetingManager{ public event GreetingDelegate MakeGreet; public void GreetPeople(string name){ MakeGreet(name); } } GreetingManager greetingManager; greetingManager.MakeGreet+=EnglishMeeting(); greetingManager.MakeGreet+=ChineseMeeting(); greetingManeger.GreetPeople("xixixixixixixi");
很容易注意到:MakeGreet事件的声明与之前委托delegate1的声明唯一的区别是多了一个Event关键字。
看到这里,在结合上面的讲解:声明一个事件不过类似于声明一个进行封装的委托类型的变量而已。
加深理解 、如何使用
转载一下高手
http://blog.csdn.net/cheungbill/article/details/7687894
事件是特殊的委托 对委托进行了封装 事件是特殊的委托
事件规定只允许用add, remove方法来操作 所以不支持=操作
事件内部 private delegate 。。。所以只能在类的内部调用
委托 故名思意 就是请别人帮忙 监控一下
*两个类 类2监控类1了 如果在类1中做了什么事 要触发在类2的事件(一个处理函数),传统方法 要在类1的处理函数中触发 类2的处理函数 那类2就得在类1之前实例化 这样就两者就相关联了 与面向对象的概念不符,
传统 class A{ A的函数(B的函数)} class B{B的函数()} B要在A之前实例化 A的对象才可以触发B的函数
使用事件 class A{ A的函数(B的函数)} class B{B的函数()} 事件+=B;只要A一触发事件就调用B的函数*
迭代器的使用
IEnumerable和IEnumerator 详解
Foreach 实现机制
- C#入门学习记录
- C#入门学习
- C#学习入门
- 学习C#的入门书籍
- c#经典入门--学习笔记
- c#经典入门--学习笔记
- C#入门学习笔记之一
- C#入门经典学习1-C#简介
- C#学习笔记(一)-- 入门的困惑
- 《C#入门经典》学习笔记(变量)
- 《C#入门经典》学习笔记(函数)
- 《C#入门经典》学习笔记(泛型)
- asp.net入门---c#语法学习
- 《Visual C# 2005入门经典》学习总结
- c#经典入门学习笔记-定义集合
- c#经典入门学习笔记-定义集合
- 我的C#入门学习代码整理
- C#入门经典学习笔记之数据类型
- EXPRESS OLE DB Library for C++
- run Time
- Gitlab迁移小记
- 发现个学spark的地方,不错
- 关键字和宏
- C#学习入门
- Android版本更新示例
- SDUT3347数据结构实验之数组三:快速转置
- 7.29
- PHPCMS V9 列表页调用任意文章内容
- Linux进程监控
- 【php】会潮支付接口
- Hdu 5768 Lucky7
- 宏观和微观的结合---不可取代的专业能力系列(一)