【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
- 【C#与.NET程序设计】(2)- C#基本数据类型及控制结构
- 【C#与.NET程序设计】(4)- C#类及OOP
- 【C#与.NET程序设计】(1)- .NET
- 【C#与.NET程序设计】(6)- C#垃圾回收及接口类型
- c#的基本数据类型与.NET Framework类型
- C# 与 C++ 数据类型比较及结构体转换
- C# 与 C++ 数据类型比较及结构体转换
- C# 与 C++ 数据类型比较及结构体转换
- C# 与 C++ 数据类型比较及结构体转换
- C#与C++数据类型比较及结构体转换
- C#与C++数据类型比较及结构体转换[整理]
- C#学习笔记(一)——C#核心编程结构 I Main、Console、基本数据类型与循环
- 【C#与.NET程序设计】(3)- C#基本参数类型
- 【C#与.NET程序设计】(7)- C#泛型、委托
- 【C#与.NET程序设计】(8)- C#事件、Lambda
- C#与.NET数据类型对照
- C#实验3--基本控制结构
- C#轻松入门(二)数据类型与流程控制
- Matlab中对字符串的处理(转 备查)
- Java内存区域的划分
- 独家 | 社交媒体假新闻检测方法及发展方向(附数据集)
- 啊啊啊
- 工厂模式与抽象工厂模式
- 【C#与.NET程序设计】(2)- C#基本数据类型及控制结构
- 使用小米手机开发调试遇到无法安装APK的问题
- 页面模板——freemaker对比velocity、jsp的模板
- Android 调用系统分享(不使用第三方),指定QQ、微信等
- Java的OutOfMemoryError和StackOverflowError
- 一个程序员6年的浏览器收藏夹
- 自步学习之SPLD
- 富士通半导体和安森美半导体宣布加强战略合作关系
- 安卓按home键之后,再次点击程序图标避免再次重新启动程序解决办法