首先是C#传递给方法变量语义处理,这个是C++过渡到C#一个很大的绊脚石 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace @ref { class Program { public struct mirror //用户自定义值类型,值类型传值使用的是副本方式。如果需要传引用,则需要加 ref { public int id; public string name; } public class mirror2 //类,传值用的是引用方式 { public string name; } static void Main(string[] args) { mirror value; value.id = 5; value.name = "值类型修改前"; Modify(value); mirror2 mc = new mirror2(); mc.name = "类修改前"; ModifyClass(mc); Console.WriteLine("value={0},name={1}",value.id,value.name);//输出为修改前 Console.WriteLine(mc.name); //输出为修改后,C#采用值传递方式,而不是和C++一样传递副本,也就是说,在这里,只是复制了对象的引用,没有复制对象本身 Console.ReadKey(); } static void Modify( mirror value) { value.id = 10; value.name = "值类型修改后"; } static void ModifyClass(mirror2 value) { value.name = "类修改后"; } } } 下面是一个定时器,同时包含了一个值输出测试,这两个同时是文思的面试题,我就用C#实现了下 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Timers; namespace timer { /// <summary> /// C#定时器的使用一例,System.Timers包含一个Timer,System.Thread里也有一个。System.windows.form也有一个 /// </summary> class Program { static void Main(string[] args) { Timer t = new Timer(10000);//定义定时器 t.Elapsed += new ElapsedEventHandler(show);//定义事件触发处理函数,用的是委托,类似C++的函数指针 t.AutoReset = true;//重置 t.Enabled = true; Console.ReadKey();//此计时器是在新线程里运行,故这里要中断才能看到效果 } public static void show(object source, System.Timers.ElapsedEventArgs e) { //这里只是为了做个小测试,就输了下面的语句 Byte b=(byte)'A'; Console.WriteLine ("1="+b) ; Console.WriteLine ("2="+(byte)b); Console.WriteLine ("3="+(char)b); } } }