数据类型
- 简单数据类型:
byte,short,int,long,float,double,char,bool
- 组合数据类型:
struct、enum、class
- 值类型:作为参数传递时,传递拷贝。包括:简单数据类型、
struct
类型、enum
类型 Book bk
存放到栈里面,Book bk = new Book()
存放到堆里,要自己释放否则导致内存泄漏
using System;
namespace ConsoleApp3
{
public struct Book
{
public double Price;
public string Title;
public string Author;
}
class Program
{
static void Changebook(Book bk)
{
bk.Price = 1.01;
bk.Title = "Spss";
bk.Author = "John";
}
static void PrintBook(Book bk)
{
Console.WriteLine("Book Infor:\n Price={0},Title={1},Author={2}", bk.Price, bk.Title, bk.Author);
}
static void Main(string[] args)
{
Book bk;
bk.Price = 10.01;
bk.Title = "Matlab";
bk.Author = "Tom";
PrintBook(bk);
Changebook(bk);
PrintBook(bk);
}
}
}
Book Infor:
Price=10.01,Title=Matlab,Author=Tom
Book Infor:
Price=10.01,Title=Matlab,Author=Tom
- 引用类型:作为参数传递时,传递地址。包括:
class
类型、array
数组 - 对于引用类型来说要在堆里新创建一个对象
using System;
namespace ConsoleApp3
{
public class Book
{
public double Price;
public string Title;
public string Author;
}
class Program
{
static void Changebook(Book bk)
{
bk.Price = 1.01;
bk.Title = "Spss";
bk.Author = "John";
}
static void PrintBook(Book bk)
{
Console.WriteLine("Book Infor:\n Price={0},Title={1},Author={2}", bk.Price, bk.Title, bk.Author);
}
static void Main(string[] args)
{
Book bk = new Book();
bk.Price = 10.01;
bk.Title = "Matlab";
bk.Author = "Tom";
PrintBook(bk);
Changebook(bk);
PrintBook(bk);
}
}
}
Book Infor:
Price=10.01,Title=Matlab,Author=Tom
Book Infor:
Price=1.01,Title=Spss,Author=John
C#中Write
和Writeline
的区别:
Write
:光标会停在输出字符串的最后一个字符,不会移动到下一行Writeline
:将要输出的字符串与换行控制字符一起输出,当次语句执行完毕的时候,光标会移到目前输出字符串的下一行
using System;
namespace ConsoleApp7
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("林深时见鹿,海蓝时见鲸,梦醒时见你.");
Console.WriteLine("可实际:林深时雾起,海蓝时浪涌,梦醒时夜续。 不见鹿,不见鲸,也不见你。");
Console.Write("但终究: 鹿踏雾而来,鲸随浪而涌。 你没回头又怎知我不在。 可我看来: 鹿见人而惊 消失于林深, 鲸踏浪而上 搁浅于浅滩.");
Console.WriteLine("亦如我见你 如碌如惊。");//注意Write下面的输出语句不会换行输出而WriteLine后面的语句会换行输出
}
}
}
林深时见鹿,海蓝时见鲸,梦醒时见你.
可实际:林深时雾起,海蓝时浪涌,梦醒时夜续。 不见鹿,不见鲸,也不见你。
但终究: 鹿踏雾而来,鲸随浪而涌。 你没回头又怎知我不在。 可我看来: 鹿见人而惊 消失于林深, 鲸踏浪而上 搁浅于浅滩.亦如我 见你 如碌如惊。
- 引用类型:
Array
数组
using System;
namespace ConsoleApp7
{
class Program
{
static void ChangeArrayItem(int[] array)
{
for (int i = array.Length - 1; i >= 0; i--)
{
array[i] = array.Length - 1 - i;//把数组倒序
}
}
static void PrintArrayItem(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write("{0}", array[i]);//把数组中的元素一个挨一个输出
}
Console.WriteLine();//输出一个空行把光标移动到下一行
}
static void Main(string[] args)
{
int[] arr = new int[10];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = i;
}
PrintArrayItem(arr);
ChangeArrayItem(arr);
PrintArrayItem(arr);
}
}
}
0123456789
9876543210
变量和常量
- 变量定义:变量类型 变量名:
- 常量定义:
readonly
在声明或构造函数中初始化,const
必须在声明时初始化
构造函数
- 函数名和类名相同
- 函数没有返回值
注:const
和static
可以直接调用类名方法来使用
using System;
namespace ConsoleApp8
{
public class SimpleClass
{
public int X;
public readonly int Y = 2;
public readonly int Z;
public const double Pi = 3.14159;
public const string Etc = "...";
public SimpleClass()
{
Z = 3;//Z是通过readonly定义的所以可以在构造函数中初始化
}
public SimpleClass(int p1, int p2, int p3)
//编译时多态
{
X = p1;
Y = p2;
Z = p3;
}
class Program
{
static void Main(string[] args)
{
SimpleClass sp1 = new SimpleClass();
sp1.X = 1;
Console.WriteLine("sp1:x={0},y={1},z={2}", sp1.X, sp1.Y, sp1.Z);
SimpleClass sp2 = new SimpleClass(-1, -2, -3);
Console.WriteLine("sp2:x={0},y={1},z={2}", sp2.X, sp2.Y, sp2.Z);
Console.WriteLine("PI={0}{1}", SimpleClass.Pi, SimpleClass.Etc);//调用类名方法
}
}
}
}
sp1:x=1,y=2,z=3
sp2:x=-1,y=-2,z=-3
PI=3.14159...
运算符与表达式
- 运算符:
一元运算符 x++,y++
二元运算符 x+y,x-y
三元运算符 max = x > y ? x : y; - 运算符:
算术运算符 +、-、*、/、……
关系运算符 >、>=、==、!=、<=、<、
逻辑运算符 !、&&、|| 二进制:~、&、| - 表达式:由运算符和变量或常量组成的式子
- 基本语句:
条件语句(if-else if-else)
开关语句
switch(表达式)
{
case值1:语句序列1;break;
case值2:语句序列2;break;
case值N:语句序列N;break;
default:语句序列N+1;break;
}
using System;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
Random rdm = new Random();
int i = rdm.Next(1, 5);
Console.WriteLine(i);
switch (i)
{
case 1:Console.WriteLine("Case 1.");break;
case 2:Console.WriteLine("Case 2.");break;
case 3:Console.WriteLine("Case 3.");break;
default:Console.WriteLine("Default Case.");break;
}
}
}
}
1
Case 1.
using System;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
Random rdm = new Random();
int i = rdm.Next(1, 5);
Console.WriteLine(i);
switch (i)
{
case 1:
case 2:
case 3:Console.WriteLine("It is 1,2or3.");
break;
default:Console.WriteLine("Default Case.");break;
}
}
}
}
2
It is 1,2or3.
- 循环语句:
for
循环,while
循环,do-while
循环
using System;
namespace ConsoleApp11
{
class Program
{
static void Main(string[] args)
{
int[] array = new int[] { 1, 3, 5, 7 };
foreach (int i in array)
{
Console.WriteLine(i);
}
}
}
}
1
3
5
7
try...catch...finally
语句
try
{
语句序列;
}
catch(Exception ex)
{
语句序列;
}
finally
{
语句序列;
}
//
先执行try语句产生异常(异常信息存储在ex中)执行catch语句最后执行finally语句
using System;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("请输入一个整数");
string temp = Console.ReadLine();
try
{
int count = int.Parse(temp);
for (int i = 0; i < count; i++)
{
Console.Write("*");
}
Console.WriteLine();
}
catch (Exception ex)
{
Console.WriteLine("错误原因:" + ex.Message);
Console.WriteLine("请重新运行");
}
finally
{
Console.WriteLine("结束");
}
}
}
}
//
请输入一个整数
face++
错误原因:Input string was not in a correct format.
请重新运行
结束
//
请输入一个整数
5
*****
结束
break,continue
语句
break:跳出最里面的封闭循环或switch语句中
continue:当遇到continue的时候就不往下执行了,进行封闭循环的下一次迭代
using System;
namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
for (int i = 1; i <= 100; i++)
{
if (i == 5)
break;
Console.WriteLine(i);
}
for (int i = 1; i <= 100; i++)
{
if (i < 99)
continue;
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}
//
1
2
3
4
99 100
- 注释语句
//文字序列 (单行注释) //
/*文字序列*/(多行注释)