美丽航线

 找回密码
 注册

QQ登录

只需一步,快速开始

用新浪微博连接

一步搞定

搜索
查看: 2144|回复: 15

[C/C++技术] [转]C#简明教程 [复制链接]

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:27:51 |显示全部楼层
声明:我在翻译的时候,加了一些自己的看法以及其它的一些比较,希望能让大家看的更明白,理解更透彻。
   
  有什么建议请mail:efoxxx@263.net
   
   
   
  C#简介
   
  这一部分我们说明一下C#,并讲一下如何写、在命令行编译你自己的第一个C#程序。
   
  ◆什么是C#
   
  C#是微软新推出的一种编程语言。因为它是从C和C#衍生来的,所以它的功能强大。它像VB一样简单。另外,对于网络编程来说它很像Java,它还又很多Delphi的有点。微软声称,C#是编写.NET Framework 应用程序最合适的语言。
   
  ◆安装 .NET SDK
   
  要在你的机器上运行C#,第一步必须安装.NET SDK 。 你可以在Windows ME, Windows NT, 或者 Windows 2000下安装.NET SDK。 推荐你使用Windows 2000 。 选好操作系统后,请按照下面的步骤安装:
   
  安装 IE 5.5
  安装 Microsoft .NET Framework SDK. 它是完全免费的,你可以在如下链接下载它: NET Framework SDK.
  安装完成后,你就可以随便找一个文本编辑器写你的代码了并将它保存为以.cs为扩展名的文件。在notepad中敲入下边的代码,并保存为my.cs。
  ◆C# 编译器和编辑器
   
  微软发布的新的平台.NET SDK Beta 1 release ,捆绑了C#命令行编译器。你必须安装了 .NET SDK 才能运行 C# 程序。安装了.NET SDK, 你就可以在任何文本编辑器中写你的 C# 程序代码了。 在市面上可以得到一些的三方的编辑器. 其中一些还是免费得。
   
  ◆写你的第一个C# 程序
   
  就像写你的第一个C++程序一样,开始写你的第一个C#程序。 打开文本编辑器,并敲入下边的代码:
   
  using System;
  class MyClass
  {
   static void Main() {
   Console.WriteLine("Hello World!");
   }
  }
   
   
   
  ◆编译你的第一个C# 程序
   
  现在,用你的C#命令行编译器编译你的.cs文件。C#编译器 至少要有一个参数,即C#文件名。假定你的C#文件名是myclass.cs ,那么命令行的句法如下:
   
  csc myclass.cs
   
   
   
   C#命令行编译器在你的工程的bin目录(二进制文件目录,一般来说用来放可执行文件,它在Linux下常用)。执行这个exe文件,看看结果。
   
  现在。我们来一行一行地看看源代码。
   
  第一行是:
   
  using System.
   
   
   
  为什么要using System? System 是一个名字空间(namespace),它存储了系统类。 我们在程序中用于在控制台上显示程序运行结果的控制台类(The Console class), 就是定义在这个系统名字空间(System namespace)中。所以我们要这样写。
   
  下一行是class MyClass. 关键字 class 在 C# 中用于生产新的类。
   
  class MyClass
  {
   ....
  }
   
  每一个类都又一个static void Main() 函数。 它是C#程序执行时的入口(这跟Java是一样的,当然C、C++也有main函数与之对应)
   
  static void Main() {
   Console.WriteLine("Hello, C# World!");
   }
   
  控制台类的方法 WriteLine 的作用是在控制台上写出文本。   
  本文来自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/219/23707.htm

[ 本帖最后由 吥願多讲 于 2008-12-17 10:31 编辑 ]
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:31:16 |显示全部楼层

第二节:读取命令行输入

  许多程序可以接受命令行输入,下面的程序就是接受命令行的输入后,再把它打印到控制台屏幕上。


程序1-2:NamedWelcome.cs
  1. // Namespace Declaration

  2. using System;


  3. // Program start class

  4. class NamedWelcome {


  5. // Main begins program execution.

  6. public static void Main(string[] args) {


  7. // Write to console

  8. Console.WriteLine("Hello, {0}!", args[0]);

  9. Console.WriteLine("Welcome to the C# Station Tutorial!");


  10. }

  11. }
复制代码
  把程序编译为NamedWelcome.exe ,在命令行输
入"NamedWelcome Joe"。一定要在程序名后加上人名或者其它什么,
否则程序会出错。以后我们会讨论如何检测和避免这样的错误。


  在程序1-2中,你可以看到"Main"方法的参数列表里有一个参
数,名字是"args",也就是下面的程序会用到的参数。"string[]"的
作用则是定义参数的数据类型为字符串类型,可容纳一或多个字符。
而方括号"[]"表示"string[]"是一个数组,可以容纳多个参数。因
此,参数可以是来自命令行的一个或多个参数。


  你会注意到Console.WriteLine("Hello, {0}!", args[0]);这一
行程序。这行程序和上一个不同,在引号里面多了一个参数"{0}"。
在WriteLine语句中参数是表示方法这样的,第一个参数的格式
是"{0}",第二个则是"{1}",以此类推。在这里"{0}"表示由结束引
号之后的参数"args[0]"来决定"{0}"处的内容。根据这个思想,我们
来看看结束引号内容之后的参数"args[0]"。

  


  "args[0]"参数是指"args"数组中的第一个元素,第二个元素就
是"args[1]",以此类推。比如说,我在命令行模式下输
入"NamedWelcome Joe","args[0]"的值就是"Joe"


  现在我们再看这句代码:Console.WriteLine("Hello, {0}!",
args[0]); ,在执行过程中,"{0}"将被参数"args[0]"中的值代替,
和前面的"Hello,"一起输出到屏幕上。因此当我们执行程序时输
入"NamedWelcome Joe"时,将会输出以下内容:


>Hello, Joe!

>Welcome to the C# Station Tutorial!
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:35:35 |显示全部楼层

第三节 C#中的out和ref参数

out和ref参数是用于让传递到方法的参数中带回返回值。

在你需要让方法返回多于一个返回值的情况下,这俩个参数很有用。



◆out参数

out参数可以用于让同一个变量参数既传参又带回返回值。(有点像C中的指针哟)
  1. public class mathClass
  2. {
  3.    public static int TestOut(out int iVal1, out int iVal2)
  4.    {
  5.      iVal1 = 10;
  6.      iVal2 = 20;
  7.      return 0;
  8.    }

  9. public static void Main()
  10. {
  11.       int i, j;   //变量i,j不需要初始化
  12.       Console.WriteLine(TestOut(out i, out j));
  13.       Console.WriteLine(i);
  14.       Console.WriteLine(j);
  15.   }
  16. }
复制代码
efoxxx补充:

这里我想补充一个谭浩强老师的一个经典的C程序例子:swap
  1. public class swapClass
  2. {
  3.    public static int SwapOut(out int iVal1, out int iVal2)
  4.    {
  5.      int temp;

  6. temp = iVal1;  
  7.      iVal1 = iVal2;
  8.      iVal2 = temp;

  9. return 0;
  10.    }

  11. public static void Main()
  12. {
  13.       int i, j;   // 变量i,j不需要初始化
  14.       SwapOut(out i, out j);
  15.       Console.WriteLine(i);
  16.       Console.WriteLine(j);
  17.   }
  18. }
复制代码
◆ref参数(引用)
与Java和C++的概念是一样的。

你也可以用ref来得到多于一个的返回参数。
  1. namespace TestRefP
  2. {
  3.    using System;

  4.    public class myClass
  5.    {
  6.       public static void RefTest(ref int iVal1 )
  7.       {
  8.           iVal1 += 2;
  9.       }

  10.       public static void Main()
  11.       {
  12.          int i; // variable need not be initialized
  13.          i = 3;
  14.          RefTest(ref i );
  15.          Console.WriteLine(i);
  16.       }   
  17.    }
  18. }
复制代码

[ 本帖最后由 吥願多讲 于 2008-12-17 10:37 编辑 ]
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:38:48 |显示全部楼层

第四节 高效C#――字符串编程

◆空字符串
   
  检测一个字符串是否为空是一个基本的编程要求。
   
  检测一个字符串是否为空的最有效的方法不是用null,也不是用它与“”字符串相比较,而是用字符串类的Length属性。
  1. string str1 = AMethodReturnsString()
  2.   {
  3.    // Do something and return a string
  4.   }
  5.    
  6.   if (str1.Length >0 )
  7.   {
  8.    // do something
  9.   }
复制代码
◆字符串连接
   
  你一旦修改了一个字符串,结果是它将返回一个新的字符串。编程时生成太多的字符串对象势必会降低你的程序的运行效率。不过,你可以避免生成一个新的字符串实例――使用StringBuilder类。
   
   
   
  假定你需要连接俩个字符串。 下边是传统的方法――
  1.   string str1 = "I like ";
  2.    string str2 = "Soccer";
  3.    string strConcat = string.Concat(str1, str2);
复制代码
结果为: strConcat = "I like Soccer".
   
   
   
  你可以用StringBuilder类和它的Append方法来完成同样的工作:
  1.   StringBuilder MyStrBuilder = new StringBuilder ("I like ");
  2.   String newStr = "Soccer";
  3.   MyStrBuilder.Append(newStr);
复制代码
结果 MyStrBuilder 为 "I like Soccer".
   
   
   
  ◆字符串比较
   
  用String.Equals方法来比较俩个字符串是否相等:
  1.   string str1 = AMethodReturnsString()
  2.    
  3.   if (str1.Equals("TestSting") )
  4.   {
  5.    // do something
  6.   }   
复制代码
本文来自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/219/23704.htm
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:40:01 |显示全部楼层

第五节 C#的数据类型

程序员拿见一门编程语言后,第一件事情就是看它有哪些数据类型,怎么使用它们。在这一部分,我将介绍C#的数据类型,以及在程序中怎样使用它们。
   
  ◆基本数据类型
   
  C#中多数的数据类型是从C 和 C++语言中来的。 请看下表:
   
  数据类型
   描述
   举例
   
  object
   所有其它类型的基类
   object obj = null;
   
  string
   字符串类型-一系列的Unicode 字符
   string str = "Mahesh";
   
  sbyte
   8-bit 有符号整型
   sbyte val = 12;
   
  short
   16-bit有符号整型
   short val = 12;
   
  int
   32-bit有符号整型
   int val = 12;
   
  long
   64-bit有符号整型
   long val1 = 12;
  long val2 = 34L;
   
  bool
   布尔型; 可取 true 或者 false俩个值
   bool val1 = true;
  bool val2 = false;
   
  char
   字符型; Unicode字符
   char val = 'h';
   
  byte
   8-bit无符号整型
   byte val1 = 12;
  byte val2 = 34U;
   
  ushort
   16-bit 无符号整型
   ushort val1 = 12;
  ushort val2 = 34U;
   
  uint
   32-bit 无符号整型
   uint val1 = 12;
  uint val2 = 34U;
   
  ulong
   64-bit 无符号整型
   ulong val1 = 12;
  ulong val2 = 34U;
  ulong val3 = 56L;
  ulong val4 = 78UL;
   
  float
   单精度浮点数型
   float val = 1.23F;
   
  double
   双精度浮点数型
   double val1 = 1.23;
  double val2 = 4.56D;
   
  decimal
   高精度型128位数据类型(用于货币等)
   decimal val = 1.23M;
   
   
   
   
  ◆C#中的类型
   
  C# 支持两种类型: 数值类型和参考类型
   
  类型
   描述
   
  数值类型
   包括简单的数据类型,不如说 int, char, bool, enums
   
  参考类型
   包括对象,类,接口,代理和数组类型
   
   
  数值类型- 数值类型对象变量中直接包含了真实的数据。对数值类型,每个变量都有它们自己的数据的拷贝,并且不可能通过操作一个变量而去影响另外一个变量。例如:
   
  int i = 10;
   
  参考类型-参考类型变量存储了真实数据的引用。对参考类型来说,让两个变量指向同一个对象是可能实现的,因此,可以通过操作一个变量而去影响另外一个变量。例如:
   
  MyClass cls1 = new MyClass();
   
  ◆数据类型转换
   
  C# 支持两种类型的转换,隐式转换和显式转换。
   
  ⑴隐式转换是直接转换 。例如:
   
  int iVal = 34;
  long lVal = intValue;
   
   
  ⑵显式转换包含有强制类型转换。 例如:
   
  long lVal = 123456;
  int iVal = (int) lVal;   
本文来自: 乘风原创程序(http://www.qqcf.com) 详细出处参考:http://study.qqcf.com/web/219/23703.htm
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-17 10:58:14 |显示全部楼层

第六节 建立第一个C#工程(Project)

建立第一个C#工程(Project)



本文将一步一步指导你完成你的第一个C#工程。

第一步: 生产一个空的C#工程

从VS2005菜单选取 文件->新建->项目->Visual C#->空项目. 添上你的工程名,并通过"浏览"按钮来选择一个合适的目录。如下图所示:



第二步: 为它添加一个空类

    在解决方案资源管理顺中右键单击你的工程并点击添加->类


你会看到下边这个对话框。在这里,你可以往你的工程中添加各种各样的类。 我们现在就添加一个C# 类。填写你的类的名称,并点击"添加"。



      现在,你已经为你的工程加了一个类了。Visual Studio 给你的类生成了一个框架,就像下边这样:
  1. namespace Project1
  2. {
  3.    using System;
  4.    /// <summary>
  5.    /// Summary description for Class1.
  6.    /// </summary>
  7.    public class Class1
  8.    {
  9.       public Class1()
  10.       {
  11.          //
  12.          // TODO: Add Constructor Logic here
  13.          //
  14.        }
  15.      }
  16. }
复制代码
第三步: 给类添加功能

现在该给类添加功能了。仿照下边代码,添加几个函数,并在Main 函数中调用它们。
  1. namespace Project1
  2. {
  3.    using System;
  4.    /// <summary>
  5.    /// Summary description for Class1.
  6.    /// </summary>
  7.    public class Class1
  8.    {
  9.       // 求2次方
  10.       public int Square(int num)
  11.       {
  12.           return num*num;
  13.       }
  14.       // 两个整数相加,返回和
  15.       public int Add(int num1, int num2 )
  16.       {
  17.       return num1 + num2;
  18.       }
  19.       // 两个双精度数相加,返回和
  20.       public double Add(double num1, double num2 )
  21.       {
  22.            return num1 + num2;
  23.       }
  24.       // 两个整数相乘,返回积
  25.       public int Multiply(int num1, int num2 )
  26.       {
  27.           return num1 * num2;
  28.        }
  29.       // 大数减小数,返回差
  30.       public int Subtract(int num1, int num2 )
  31.       {
  32.          if ( num1 > num2 )
  33.          {
  34.            return num1 - num2;
  35.           }
  36.            return num2 - num1;
  37.         }
  38.      }
复制代码
// 从Main 调用类Class 1
  1. public class Class2
  2. {
  3. static void Main()
  4. {
  5. Class1 sq = new Class1();
  6. Console.WriteLine( sq.Square(8).ToString());
  7. Console.WriteLine( sq.Add(8.3, 9.24).ToString());
  8. Console.WriteLine( sq.Multiply(5,8).ToString());
  9. Console.WriteLine( sq.Subtract(22, 42).ToString());
  10. }
  11. }
  12. }
复制代码
第四步: 建立编译并运行工程
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

船长轮机长

漫游者

Rank: 8Rank: 8

人气值
3683
魅力
887
金币
2842
威望
17435
最后登录
2012-1-15
积分
17435

积极分子 发帖之星

发表于 2008-12-17 19:44:35 |显示全部楼层
哇,相当复杂@@


让大地来记住快乐的痕迹

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2008-12-19 16:52:56 |显示全部楼层
有几复杂啊,比C++仲要简单好多的呢。

我学极都学唔识C++。。。郁闷ING
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

Rank: 2

人气值
1279
魅力
68
金币
1296
威望
330
最后登录
2011-6-12
积分
330

积极分子

发表于 2009-2-27 11:57:35 |显示全部楼层
好帖子!!!!谢谢师兄~!

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2009-3-2 22:32:27 |显示全部楼层
其实好多都系用到的时候先去学的咋.
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

斑竹

尽早找到我要的“四叶草” ... . ...

Rank: 12Rank: 12Rank: 12

人气值
399
魅力
92
金币
619
威望
521
最后登录
2011-4-9
积分
521

老好人 优秀版主

发表于 2009-3-6 14:44:28 |显示全部楼层
系咪一定要安装 .NET SDK 啊?
我安装既系visual studio 2005,当中应该有包括 .NET SDK 吧?
翠鸟--自由鸟--幸福鸟--富贵鸟! 四片叶子的幸运草代表人生梦寐以求的四样东西:名誉、财富、真爱、健康。

使用道具 举报

斑竹

伪球迷

Rank: 12Rank: 12Rank: 12

人气值
1228
魅力
466
金币
4283
威望
2196
最后登录
2012-1-14
积分
2196

积极分子 金点子 发帖之星 优秀版主

发表于 2009-3-6 23:33:02 |显示全部楼层
一头雾水....怕是我数学太差了
期待别人带给你奇迹,不如自己创造奇迹....

使用道具 举报

超级斑竹

悠闲野鹤

Rank: 16Rank: 16Rank: 16Rank: 16

人气值
989
魅力
265
金币
2553
威望
1822
最后登录
2011-9-2
积分
1822

发帖之星 老好人 金点子 积极分子 超级版主 功勋元老

发表于 2009-3-17 10:52:26 |显示全部楼层
11# 翠鸟piano


安装visual studio 2005,当然有 .NET SDK
曾经有个女孩子要与我共赴黄泉--“你再不还我钱,我就和你同归于尽!”
曾经有个女孩子与我相约到下辈子--“想追求我?下辈子吧!”
曾经有个女孩子肯为我而死--“跟你在一起,我宁愿死!”

使用道具 举报

Rank: 12Rank: 12Rank: 12

人气值
74
魅力
88
金币
476
威望
256
最后登录
2010-5-14
积分
2185
发表于 2009-4-4 13:04:57 |显示全部楼层
有vc++的不,发来看看!
人本是人,不必刻意去做人,世本是世,无须精心处世。

使用道具 举报

Rank: 12Rank: 12Rank: 12

人气值
74
魅力
88
金币
476
威望
256
最后登录
2010-5-14
积分
2185
发表于 2009-4-4 15:52:38 |显示全部楼层
看完了 觉得out和ref功能很酷!
人本是人,不必刻意去做人,世本是世,无须精心处世。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

社区首页| 家园首页| 群组首页|Archiver|美丽航线 ( 粤ICP备09013526号 )

GMT+8, 2012-2-8 09:56 , Processed in 2.672180 second(s), 15 queries .

Powered by Discuz! Templates yeei! © 2001-2011 Comsenz Inc.

回顶部