C#学习笔记(一)——C#核心编程结构 I Main、Console、基本数据类型与循环

来源:互联网 发布:南风知我意2 txt 编辑:程序博客网 时间:2024/06/05 04:00

C#核心编程结构 I


1、入口方法Main


1.1 定义

每一个可执行的C#应用程序必须包含一个定义了Main()方法的类,这个方法用来表示应用程序的入口点。
  • C#是一种区分大小写的程序设计语言,因此Main与main不同。
  • 所有C#的关键字都是小写的,如:public,class,dynamic等。

1.2 Main()方法的其他形式

1、
//整数返回类型,以字符串数组作为参数
static int Main(string args[])
{
//在退出之前必须返回一个值
return 0;
}
2、
//没有返回类型,没有参数
static void Main()
{

}
3、
//整数返回类型,没有参数
static int Main()
{
//在退出之前必须返回一个值
return 0;
}

2、System.Console类


2.1 定义

在学习的初期我们为了避免过多的关注GUI或WEB前端的复杂度,我们通常会编写控制台程序。
  • System.Console类是控制台应用程序的标准输入流、输出流和错误流。此类无法被继承
  • 更多信息参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.console(v=VS.80).aspx

2.2 Console基本输入和输出

  • Console类定义了捕捉输入输出的一套方法。它们都被定义成静态的,因此可以通过类的名字作为方法名的前缀来调用。如:Console.Write();。
  • WriteLine()将文本字符串最后连同一个回车符一起输送到输出流。
  • Write()将文本输送到输出流而不带回车符。
  • ReadLine()从输入流接收信息直到遇见回车符。
  • Read()从输入流接收一个字符。
  • 如果需要定义一个字符串字面量,其中包含一些要到运行时才知道其值的数据片段可以在文本内部指定占位符。
例:
//一个带招呼的小程序
Console.WriteLine("Please enter your name:");
string name=Console.ReadLine();
Console.WriteLine("Hello,"+name+"!");//这句话我们亦可以改为Console.WriteLine("Hello,{0}!",name);
//占位符不一定必须按顺序放置,但是占位符是按顺序一 一对应后边的值
//比如我们要输出:10,20,30
Console.WriteLine("{1},{0},{2}",20,10,30);

3、系统数据类型和C#简化符


3.1 定义

和其他语言一样C#也定义了一组基本数据类型,但是和其他语言不一样的是这些关键字不在只是简单的编译器可以认识的标示,而是System命名空间中完整类型的简化符号
C#简化符号是否符合CLS系统类型(命名空间皆为System)作用boolYBoolean表示真或者假(true/false)sbyteNSByte带符号的8位数字byteYByte无符号的8位数字shortYInt16带符号的16位数字ushortNUInt16无符号的16位数intYInt32带符号的32位数uintNUInt32无符号的32位数longYInt64带符号的64位数ulongNUInt64无符号的64位数charYChar一个16位的Unicode字符floatYSingle32位浮点数doubleYDouble64位浮点数decimalYDecimal128位带符号数stringYString表示一个Unicode字符集和(字符串)ObjectYObject所有类型的基类
  • 符合CLS的.NET代码是可以被任何托管编程语言使用的(如VB.NET),如果程序中出现了不符合CLS的数据,其它语言将不能使用它。
  • 浮点数被默认当做double类型。若要表示一个float类型的字面量需要在其后面加上f或F,如:4.8f。
  • 整数被默认当做int类型。若要表示一个long类型的字面量需要在其后面加上l或L,如:500L。但是这里更推荐用L,因为小写的L:l容易和1混淆。
  • 以上表中的Object和string是引用类型,其他的都是值类型。所谓说值类型就是其分配在内存的栈上,可以快速分配。而引用类型则分配在托管堆上。

3.2 变量的声明与初始化

  • 变量声明后要初始化,不然会收到一个编译器错误。
例:
//这样子之后直接运行是错误的
//int a;
//因为没用对其进行初始化
//以下是正确的
//1、声明后马上初始化
int b=0;
//2、声明后换一行初始化
int c;
int d;
c=1;
d=2;
//3、同一行可以声明和初始化多个
int e=3,f=4,g=5;
//4、也可以用系统类型初始化
System.Int32 h=6;

3.3 数据类型类的层次结构


  • 顶层类型会为派生类型提供一些默认行为。
  • 所有类型都派生自Object类。
  • 大多数的数值数据类型都派生自ValueType类,这些类型自动在栈上分配,因此非常高效。
  • 因此我们直接对int值调用方法是合法的,如:56.ToString();。
  • 数值类型可以通过MaxValue/MinValue属性获得储存范围。
  • Parse()方法可以从字符串中解析数值。

3.4 数据类型的转换

当一种类型的值转换为大小相等或更大的另一类型时,则发生扩大转换,这种转换一般是安全的。 当一种类型的值转换为较小的另一种类型时,则发生收缩转换,某些情况下可能会出现错误的。
详情参见MSDN:http://msdn.microsoft.com/zh-cn/library/vstudio/08h86h00(v=vs.100).aspx

4、字符串


4.1 定义

  • 表示文本,即一系列 Unicode 字符的集合。
  • 更多信息参见MSDN:http://msdn.microsoft.com/zh-cn/library/system.string(VS.80).aspx
  • 字符串(String)可以用“+”拼接。也可以用Concat(String,String)方法拼接,但除了多打几个字以外没有任何好处。
  • String类型的字符串是不可变的,每次我们改变String变量时,都是在内存中创建一个新的String对象,让引用指向它。因此当我们可能会大量弃用字符串或改变字符串时String的效率使非常低的。因此我们可以用System.Text.StringBulider类型代替String使用。

4.2 转义字符

\’ 单引号
\” 双引号
\\ 反斜杠
\0 空
\a 警告(产生峰鸣)
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
为了避免某些时候转义字符的麻烦,C#引入了逐字字符串:在字符串前边加@,你的字符串里边是什么便是什么,如:@"c:\User"。不然的话应该是“c:\\User”。

4.3 字符串的相等比较

  • 一般来讲C#中引用类型的相等(==)一般比较的是内存中的对象是否相同,如果相同则返回true,不同则返回false。
  • 字符串由于被做过特殊的处理,所以它的“相等”比较的是字面量的值,而不是是否是同一个对象。(不同于java)
  • 字符串的相等比较是区分大小写的,如:“Hello”与“hello”是不相等的。

5、隐式数据类型


我们一般声明数据时使用的都是显式数据类型性,如:int i=0;string s="s";,我们一开始便声明了数据的类型。但C#还支持隐式数据类型,我们可以在刚开始的声明阶段不对变量声明明确的类型。而是:var i=0;var s="s";
  • C#中可以用隐式数据类型代表任何类型,包括自定义类型。
  • C#中的var与脚本语言(javascript)中的Variant并不一样。C#中var是强类型,因此当var变量确定了类型之后,就不能改变其类型了。
  • var通常用在赋值时我们并不能确认其变量类型的情况,如使用LINQ时的很多情况。
  • var不能用于字段数据(属性?)
  • var不能用于返回值类型或参数类型
  • var必须在声明时赋初始值,并且不能为null
  • var被赋初始值之后可以为null值
  • var可以分配给其他变量

6、C#循环


6.1、for循环

int n=0;
for(int i=1;i<=100;i++)
{
n+=i;
}

6.2、foreach循环

foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
int[] fibarray = new int[] { 0, 1, 2, 3,5, 8, 13 };
foreach (int iin fibarray)//可以将这里的int改为var {
System.Console.WriteLine(i);
}

6.3、while与do/while

while 语句执行一个语句或语句块,直到指定的表达式计算为 false。
int n = 1;
while (n < 6)
{
Console.WriteLine("Current value of n is {0}", n);
n++;
}
do 语句重复执行括在 {} 里的一个语句或语句块,直到指定的表达式计算为 false。(因为会影响到代码可读性,因此并不建议使用。)
int x = 0;
do
{
Console.WriteLine(x);
x++;
} while (x < 5);

7、C#条件结构


7.1 if/else语句

if 语句根据 Boolean 表达式的值选择要执行的语句。下面的示例将 Boolean 标志 flagCheck 设置为 true,然后在 if 语句中检查该标志。输出为:The flag is set to true。
bool flagCheck = true;
if (flagCheck == true)
{
Console.WriteLine("The flag is set to true.");
}
else
{
Console.WriteLine("The flag is set to false.");
}

7.2 switch语句

switch 语句是一个控制语句,它通过将控制传递给其体内的一个 case 语句来处理多个选择和枚举。
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
原创粉丝点击