【C#与.NET程序设计】(2)- C#基本数据类型及控制结构

来源:互联网 发布:施耐德网络面板接线图 编辑:程序博客网 时间:2024/06/07 07:14

最简单的一个c#程序

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace learn_cs{    class myProgram    {        static void Main(string[] args)        {            foreach (string arg in args)                Console.WriteLine("Arg: {0}", arg);            Console.WriteLine("hello world!");            Console.ReadLine();        }    }}

Main()方法

与C++一样,C#也有多种入口形式

static void Main(string[] args)static void Main()static int Main(string[] args)static int Main()

static使得Main是类级别的而不是对象级别的,因此在调用之前不需要先创建新的类实例

命令行参数有以下3种处理方式:

// 1for (int i = 0; i < args.Length; i++ )    Console.WriteLine("Arg: {0}", args[i]);// 2foreach (string arg in args)    Console.WriteLine("Arg: {0}", arg);// 3string[] theArgs = Environment.GetCommandLineArgs();foreach (string arg in args)    Console.WriteLine("Arg: {0}", arg);

System类

System.Environment

可以获取.NET及操作系统的大量细节

// 命令行参数string[] theArgs = Environment.GetCommandLineArgs();// 本机驱动器string[] theDrives = Environment.GetLogicalDrives();// 操作系统OperatingSystem theOS = Environment.OSVersion;// 处理器数目int theProcessor = Environment.ProcessorCount;// .NET版本Version theDNET = Environment.Version;

System.Console

与控制台的交互

// 输入输出Console.Write("hello world");         //输出string,不包含换行Console.WriteLine("hello world");     //输出string,包含换行int inValue = Console.Read();         //输入字符string strValue = Console.ReadLine(); //输入string,也多用于等待回车,结束运行// 格式化输出Console.WriteLine("{0},{2},{1}", 10, "format", 30); //使用{}格式化输出任意类型Console.WriteLine("{0:c}",99.99);                   //解释为货币Console.WriteLine("{0:d3}", 99);                    //解释为3位整数Console.WriteLine("{0:f3}", 99.99);                 //解释为小数点后3位浮点Console.WriteLine("{0:x}", 99);                     //解释为16进制数// 其他Console.Beep();              // 控制台发出指定频率和持续时间的蜂鸣声Console.BackgroundColor;     // 控制台背景色Console.ForegroundColor;     // 控制台前景色Console.BufferHeight;        // 控制台缓冲区域高度Console.BufferWidth;         // 控制台缓冲区域宽度Console.Title;               // 控制台标题Console.WindowHeight;        // 控制台位置及尺寸Console.WindowWidth;         Console.WindowTop;           Console.WindowLeft;Console.Clear();             // 清除控制台显示

基本数据类型

.NET数据类型和C#简化类型对照见《【C#与.NET程序设计】(1)- .NET》

  • System.Object 是.NET世界中所有类型的基类,任何类型都可以保存在一个 Object中
  • System.Object 定义了一组方法(ToString()、Equals()、GetHashCode()等)。也就是说,所有对象都有以上方法(如12.GetHashCode())
  • 每一个数值类型都对应System命名空间中的一个结构,而string和object是引用类型(图1)
  • 浮点数默认为double,可以用后缀f/F强制标记为float;整数默认为int,可以用后缀l/L强制标记为long

             这里写图片描述
                       图1. 类型的层次结构

Sytem.Char 和 System.String

// char 拥有判断属性的方法b = char.IsDigit('a');          //其他属性:字母、大小写、标点等b = char.IsDigit("a1bc", 1);    //指定位置// 每种数据类型均有 parse 方法,可以从 string 中解析bool b   = bool.Parse("True");double d = double.Parse("99.88");int i    = int.Parse("12");char c   = char.Parse("w");// 逐字字符串(‘@’)// string 添加前缀'@',可以忽略所有转义(以下两句等价)Console.WriteLine(@"C:\MyApp\bin\Debug");Console.WriteLine("C:\\MyApp\\bin\\Debug");// 字符串的相等性// object 和 string 为引用类型,因此理论上是比较两个string是否为内存中同一个对象// 但为了实用,相等操作已被重定义为比较string对象的值string s1 = "hello";string s2 = "hi";bool isEqual = s1 == s2;  // falseisEqual = s1.Equals(s2);  // 与“==”等效,falseisEqual = s1 == "hello"   // true

System.Text.StringBuilder

  • string 类型一旦初始化后就不能改变了,其提供的所有方法实际会构造新的 string 对象
  • 对于要进行大量文本处理的程序,使用 string 会变得很低效
  • 可以使用 StringBuilder 类,与String最大的不同就是,可以修改内部数据
// 构造 StringBuilderStringBuilder sb = new StringBuilder("****** string builder ******");sb.AppendLine("append st");

System.DateTime 和 System.TimeSpan

// 时间DateTime dt = new DateTime(2017, 10, 1);Console.WriteLine("the day of {0} is {1}", dt.Date, dt.DayOfWeek);// 时间间隔TimeSpan ts = new TimeSpan(10, 30, 0);Console.WriteLine(ts);

System.Numerics

  • 定义了 BigInteger 结构,可以用来表示较大的数值(没有上下限)
  • 定义了 Complex 结构,可以对复数数据进行建模
  • 需要在工程中添加相应引用
// 一般使用 parse 的方法初始化一个 BigInteger// BigInteger 设定完后不能改变BigInteger biggy = BigInteger.Parse("999999999999999999999");// 以下两种运算等价BigInteger multi1 = BigInteger.Multiply(biggy, BigInteger.Parse("8888888888888888"));BigInteger multi2 = biggy * BigInteger.Parse("8888888888888888");

隐式类型

c#支持用 var 关键字创建隐式类型本地变量,而不必指定具体的数据类型

var myInt    = 0;var myBool   = true;var myString = "hello";

编译器会根据赋值的强类型推断其本质属性

相应的,var 隐式类型有如下限制

// 错误!var 不能用于字段数据private var myInt = 10;// 错误!var 不能用于返回值或参数类型public var MyMethod(var x, var y){;}// 错误!var 必须在声明时分配值var myData;// 错误!var 不能用 null 做初始值var myObj = null;

隐式类型本地变量只有在 LINQ 技术中才有意义,因为其返回值类型无法显式定义;
其他情况应避免用隐式类型,因为会降低程序可读性


控制结构

迭代结构

// for 循环for (int i = 0; i < 4; i++)    Console.WriteLine("Number is: {0}", i);// foreach 循环(方便迭代数组)string[] carTypes = { "Ford", "BMW", "Yugo", "Honda" };foreach (string c in carTypes) // 或者用 var 代替 string    Console.WriteLine(c);// while 循环while (true){    ...}// do/while 循环do{    ...}while(true);

条件结构

与 C/C++ 在细节上有一点点不一样

// if语句if(仅支持布尔表达式,不支持C/C++允许的“0/非0”){    ...}// switch语句switch(var){    case 1:        ...        break;    default:     // default 也必须有break/goto        ...        break;         }

参考

【1】C#与.NET 4高级程序设计(第5版)


阅读全文
0 0
原创粉丝点击