一、变量
变量的命名规则:
①变量名必须以字母、_、@开头,后边可以是数字、字母、下划线;
②同一变量不能重复声明,例如:连续声明int numOne=1;int numOne=2;会报错;
③变量名不能是系统关键字,例如string、static、void等;
④Pascal命名法、Camel命名法,Pascal命名法一般用于属性、方法,Camel命名法一般用于字段;
常见变量类型:
int、float、double、char、string、bool、const、enum、struct、decimal
①int是整型变量,用法有:int.MaxValue、int.Minvalue
int? num=null;带?表示int型变量可以赋值为null,如果不加?就把null赋值给int变量的话会报错,不信可以试试。
②float的浮点型变量
③double是双精度浮点型变量
④char是字符变量,char sex=‘男’;
⑤string是字符串,string可以看做是char类型的只读数组,
stringstrTest="abcde";
char[] charArray=strTest.ToCharArray();
charArray.Length==5;charArray[0]=='a';charArray[4]=='e';
strTest.Length==5;strTest[0]=='a';strTest[4]=='e';
char[] charArray={'a','b','c','d','e'};
string strFromCharArray=new string(charArray);
此时strFromCharArray==strTest,可通过控制台程序来验证,代码如下:
if("strFromCharArray==strTest")
{ Console.WriteLine("strFromCharArray==strTest");
}
else
{ Console.WriteLine("strFromCharArray!=strTest");
}
⑥bool类型变量,值为true或false,bool flag=8>10;此时flag==false,bool bigger=12>10;此时bigger为true
⑦const常量变量,const int count=10;或const string strTest=“test string”;
虽然没有static关键字修饰,但常量默认是静态的;
count常量、strTest常量(注意是常量而不是变量,变量可变常量不可变)声明后,
后续代码便只能读取count、strTest的值而不能修改count、strTest的值
⑧enum枚举类型变量,枚举可是跟class一个级别的不要把它当做方法来声明,
class Program
{
static void Main(string[] args)
{
Gender gender=Gender.男;
Gender girlGender=Gender.女;
string sex=gender.ToString();
int index=(int)gender;
int girlIndex=(int)girlGender;
Console.WriteLine("sex="+sex);//输出sex=男
Console.WriteLine("index="+index);//输出index=0
Console.WriteLine("girlIndex="+girlIndex);//输出girlIndex=1
//判断字符串是否在枚举中
bool result1 = Enum.IsDefined(typeof(Gender), "男");
//int、string可以转换为枚举类型
Gender objGender1=(Gender)Enum.Parse(typeof(Gender),"0");
Gender objGender2=(Gender)Enum.Parse(typeof(Gender),"1");
Gender objGender3=(Gender)Enum.Parse(typeof(Gender),"男");
Gender objGender4=(Gender)Enum.Parse(typeof(Gender),"女");
}
}
enum Gender
{ 男,//默认索引是0
女 //索引递增,女的索引就是1
}
//如果Gender变为如下那index、girlIndex的值会变为1和2
enum Gender
{ 男=1,//更改首位索引是1
女 //索引递增,女的索引就是2
}
⑨struct结构体,结构体跟class类似,可以看做是轻量级的class
结构是值类型,而class是引用类型;
结构的实例化可以不使用new运算符,class必须使用new;
结构体可以实现接口;
结构可以声明构造函数,但它们必须带参数,对结构体中的所有的公有字段、私有字段或属性进行初始化(结构不能包含显式的无参数构造函数,否则会报错)
class Program
{
static void Main(string[] args)
{
Person person1 = new Person();
person1.Address = "汤臣一号";
person1.Age = 18;
person1.Name = "蝈蝈";
ChangeStruct(person1);
//输出结果是person1.Address=汤臣一号
Console.WriteLine("person1.Address=" + person1.Address);
//当结构中有属性时,必须用new初始化,否则提示person2未初始化
Person person2;
person2.Address = "汤臣一号";
person2.Age = 18;
person2.Name = "蝈蝈";
//SuperPerson结构体中有三个public类型字段,创建实例没用new
SuperPerson super;
super.Address = "美国白宫";
super.Age = 20;
super.Name = "蝈蝈";
Console.ReadKey();
}
public static void ChangeStruct(Person person)
{
person.Address = "唐宁街10号";
}
}
public struct Person
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
private string address;
public string Address
{
get { return address; }
set { address = value; }
}
public Person(string _name, int _age, string _address)
{
name = _name;
address = _address;
age = _age;
}
}
//如果结构体中是三个字段那就可以不用new创建结构体实例
public struct SuperPerson
{
public string name;
public int age;
public string address;
public Person(string _name, int _age, string _address)
{
name = _name;
address = _address;
age = _age;
}
}
⑩decimal高精度小数类型,一般用于存储金钱,decimal比double的精度还高,因为有的人很有钱如果数字少一位那就…,
decimal money=500m;
//输出money=500
Console.WriteLine("money="+money);
随机数变量:
static void Main(string[] args)
{
//带时间种子的随机数变量每次产生的随机数都相同(不是每个都相同)
Random randomTime = new Random(0);
Random random = new Random();
int[] nums=new int[20];
for (int i = 0; i < 20; i++)
{
//nums[i] = random.Next();
//random.Next(15)等价于random.Next(0,15)
//nums[i] = random.Next(15);
nums[i] = random.Next(5, 15);//可取到最小值5
//nums[i] = randomTime.Next(15);//取不到最大值15
}
for (int i = 0; i < 20; i++)
{
Console.WriteLine("nums[i]=" + nums[i]);
}
Console.ReadKey();
}
Math函数:
Math.Ceiling(double num);//返回大于等于num的最大整数
Math.Floor(double num);//返回小于等于num的最大整数
Math.Round(double num);//四舍六入五取偶
Console.WriteLine(Math.Ceiling(12.2));//输出13
Console.WriteLine(Math.Floor(13.5));//输出13
Console.WriteLine(Math.Round(12.5));//输出12
Console.WriteLine(Math.Round(13.5));//输出14
二、运算符
赋值运算符:=
算术运算符:+、-、、/、%、++、–
一元运算符(++、–)优先级高于二元运算符(+、-、、/、%)优先级
复合赋值运算符:+=、-=、*=、/=、%=、??=
关系运算符(比较运算符):>、<、==、>=、<=、!=
逻辑运算符:&&、||、!
运算符优先级:!>算术运算符>关系运算符>&&>||
异或运算符:
class Program
{
static void Main(string[] args)
{
// ^ 两边为bool类型值时,两边的值相同时结果为false,两边的值不同时为true
Console.WriteLine(true ^ true); //false
Console.WriteLine(true ^ false); //true
Console.WriteLine(false ^ true); //true
Console.WriteLine(false ^ false);//false
// ^ 两边为整数时,两边的值转换成二进制然后逐位进行比较,如果相同则为0,不同则为1。所以应该列式:
// 5 :0000 0101
// 28:0001 1100
//结果:0001 1001
Console.WriteLine(5 ^ 28);//结果为25
}
}
三、数组
数组就是一些类型相同的数据形成的组合,数组有四种声明方法:
int[] nums=new int[3]{1,2,3};
int[] nums=new int[]{1,2,3};
int[] nums={1,2,3};
int[] nums=new int[3];
数组的长度一旦确定便不能更改,如果需求有变,则必须重新定义数组,数组的索引从0开始,int[] nums={8,6,12,5,7};nums.Length==5;nums[0]==8;nums[4]==7;
数组常用的两种排序方法如下:
int[] numArray={12,45,8,32,6};
//默认升序排列
Array.Sort(numArray);//numArray={6,8,12,32,45}
//将数组内的元素的位置翻转
Array.Reverse(numArray);//numArray={45,32,12,8,6}
//string数组的排序可以动手做一下
string[] array={"ab","aB","aBa","abc","Aa","ba"};
Array.Sort(array);//array={"Aa","ab","aB","aBa","abc","ba"};
Array.Reverse(array);//array={"ba","abc","aBa","aB","ab","Aa"};