代码改变世界

随笔分类 -  C#

C#基础:通过一个实例来学习IFormattable接口,扩展方法

2013-04-19 18:30 by 海豚座, 2206 阅读, 收藏, 编辑
摘要: 本实例中,定义了类型Student。Racer定义了几个属性和一个重载的ToString()方法,该方法以字符串格式显示学生信息。这个类实现了IFormattable接口,以支持格式字符串的不同变体。 Student类声明如下: class Student:IFormattable { public string Name { get; set; }//姓名 public string Age { get; set; }//年龄 public string Address { get; set; }//地址 public... 阅读全文

C#基础:使用Task创建任务

2012-06-18 13:44 by 海豚座, 8204 阅读, 收藏, 编辑
摘要: .NET 4 中 包含了新名称空间System.Threading.Task。它包含的类抽象出了线程的功能。使用Task类创建的任务是后台线程,所以在前台线程全部终止的时候,如果任务还没有全部执行万,就会被被动终止。启动任务 怎样启动一个任务?代码中我们首先要添加using System.Threading.Tasks;引用。我们可以使用TaskFactory类或Task类的构造函数和Start()方法。在启动任务时,会创建Task类的一个实例。首先我们看一段代码using System;using System.Text;using System.Threading.Tasks;usi... 阅读全文

C#基础:使用Thread创建线程

2012-06-16 00:04 by 海豚座, 32316 阅读, 收藏, 编辑
摘要: Thread类可以创建和控制线程,Thread类的构造函数重载为接受ThreadStart和ParameterizedThreadStart类型的委托参数。下面我们用一个例子来解释怎样用Thread类来创建一个简单的线程 static void Main(string[] args) { #region Thread无参数举例 Thread th = new Thread(ThreadChild); th.Start(); Console.WriteLine("Main Thr... 阅读全文

C#基础:线程之异步回调(委托)

2012-06-15 00:11 by 海豚座, 14281 阅读, 收藏, 编辑
摘要: 异步回调,什么是异步回调?我是这样理解的,当主线程在执行一段代码的时候,我们用委托执行了一个线程,这个线程要返回一个结果,关键是什么时候返回这个结果,异步回调就是在这个线程执行完成后立即返回这个线程的结果,然后继续执行主线程的方法。 在讨论异步回调之前我们先依次来讨论一下同步执行和异步执行,最后来讨论异步回调。一、同步执行 同步执行:在主线程执行的时候,主线程调用一个其它方法,此时主线程阻塞,等待调用方法执行完成后主线程才能继续执行。 下面是同步执行的流程图 接下来看看代码中的同步执行 static void Main(string[] args) ... 阅读全文

C#基础:线程之异步委托

2012-06-14 00:27 by 海豚座, 1546 阅读, 收藏, 编辑
摘要: 线程:是程序中独立的指令流。在我们熟悉的Visual Studio编辑器中输入C# 代码的时候,系统会自动分析代码,提示你输入的代码出现的各种错误,这是一个后台线程完成的。 创建线程的一种简单的方式就是定义一个委托,并一部调用它。Delegate类支持异步调用方法,在后台,Delegate类会创建一个执行任务的线程。为了说明委托的异步性,从一个需要一定时间的方法讨论,方法如下所示:static int TakesAWhile(int data, int ms){ Console.WriteLine("TakesAWhile start"); Thread.Sleep(ms. 阅读全文

C#基础:通过委托给任何对象数组进行排序

2012-06-13 18:50 by 海豚座, 758 阅读, 收藏, 编辑
摘要: 在日常编写程序的时候,我们需要对一些对象进行排序,比如对int数组进行排序,自定义类数组进行排序,首先我们先讨论对数组进行排序,我们应该对冒泡排序比较熟悉,下面是数组用冒泡排序的方法for (int i = 0; i < sortArry.Length; i++){ for (int j = sortArry.Length - 1; j > i; j--) { if (sortArry[i] < sortArry[j]) { int temp = sortArry[i]; sortArry[i] = sor... 阅读全文

C#基础:委托之Action<T>和Func<T>的用法

2012-06-13 14:21 by 海豚座, 16835 阅读, 收藏, 编辑
摘要: 我们在使用委托的过程中,除了为每个参数和返回类型定义一个委托之外,也就是说为每一个方法(作为参数的方法)定义一个委托,我们还可以使用Action<T>和Func<T>委托。 泛型Action<T>委托表示引用一个void返回类型的方法。Action<T>委托类存在不同的变体,可以传递至多16种不同的参数类型,没有泛型参数的Action类可以调用没有参数的方法。例如:Action<in T1>调用带一个参数的方法,Action<in T1,in T2>调用带两个参数的方法等 Func<T>的用法和Action&l 阅读全文

C#基础:对委托的简单理解

2012-06-12 22:20 by 海豚座, 753 阅读, 收藏, 编辑
摘要: 在编程过程中,我们习惯把数据作为参数传递给方法(例:int a=int.Parse(“20”);)。是否能将一个方法传递给另一个方法呢?是不是听起来有点奇怪!!! 线程大家应该熟悉吧,在计算机中并行运行新的执行序列同时运行当前的任务,这个新的序列就是线程。在Thread()的一个实例上使用方法Start()就可以启动一个新的线程。如果要告诉计算机启动一个新的序列,就必须说明要在哪里启动一个新的序列。就必须为计算机提供开始启动的方法的细节,Thread构造函数必须带一个参数,该参数定义了线程需要调用的方法。一、声明委托 当我们只用一个类时,首先我们需要定义一个类,然后实例化类的一个对象。... 阅读全文