赞
踩
变量和常量
命名规则
1.变量名可由字母数字下划线组成
2.变量名不能包含除下划线以外的任何特殊字符
3.变量名必须以字母或下划线开头
不能包含空白字符、保留字,区分大小写。
- //行注释
-
- /*块注释*/
-
- /***
- * 头注释
- *
- *
- *
- */
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace demo
- {
- class Program
- {
- static int b = 20;
- void myMethod()
- {
- int a = 10;
- //int b = 30;
- Console.WriteLine("a=" + a);
- Console.WriteLine("b=" + b);
- }
- static void Main(string[] args)
- {
- Program obj = new Program();
- obj.myMethod();
- }
- }
- }
-
C#基本数据类型
1.值类型:
值类型直接存储数据值,主要包括简单类型和引用类型,其中简单类型主要包括整数类型、浮点类型、布尔类型和字符类型等4种。值类型在 栈 中进行分配,所以效率较高,使用值类型主要是为了提高性能。值类型具有如下特性:
值类型都是存储在栈中,值类型变量可以直接分配一个值,它们是从类System.ValueType中派生的。
访问值类型变量时,一般都是直接访问其实例。
每个值类型变量都有自己的数据副本,对一个值类型的变量操作不会影响其他的变量。
值类型不能为Null,必须是一个确定的值。
A 整数类型:
整数类型代表一种没有小数的整数数值,实际编程中注意取值范围。
B 浮点类型:
浮点类型主要用于处理含有小数的数值类型,包含float、double、decimal三种类型。
如果不做任何设置,系统默认包含小数点的数值为double类型,如果要将数值以float类型来处理,则通过强制使用f或F将其指定为float类型,强制把数值指定为double类型则在后面加d或D,如果将数据强制设置为decimal,则在后面加m或M。
C 布尔型
布尔型主要用来表示真/假、TRUE/FALSE值,一个布尔变量,其值只能是TRUE或FALSE,不能将其他的值指定给布尔类型变量,并且布尔类型的值不能与其他类型进行转换。
D 字符类型
字符类型用char/Char类来表示,定义字符变量时,只能用单引号引用。``表示一个字符,而“ ”则表示一个字符串。
特例:\ 该字符比较特殊。\ 为“转义字符”。(转义字符为特殊的字符变量,以字符\开头;转义字符后面跟一个或多个字符,具有特定含义,不同于字符原有的含义。)
bool默认值为false、byte默认值为:0、char默认值为:'\0'、decimal默认值为:0.0M、double默认值为:0.0D、float默认值为:0.0F、int默认值为0、long默认值为:0L、sbyte\short\UINT\ulong\ushort默认值为:0
2. 引用类型
引用类型不包含存储在变量中的实际数据,但包含存储对值的引用,即它们指的是一个内存位置,使用多个变量时,引用类型可以指向一个内存位置。如果内存位置室友一个变量改变的,其他变量会自动反映到这个值的变化。。
引用类型变量又称为对象,可存储对实际数据的引用。c#支持两个预定义的引用类型object和string。
object等价与System.Object,c#中System.Object 是所有类的基类。
string是特殊的引用类型,但是有个特点是其值一旦初始化后就不可改变。
字符串string类型是System.String类的别名,他是从对象Object类派生出来的,可以通过两种形式进行分配:引号和@ 引号。
如:“C#”、“Name”、string str=@“c:\windows\system32”等价于 string str = “c:\windows\system32”
3.值类型和引用类型的区别
值类型直接存储数值,在内存空间中的栈中操作;引用类型存储的是对其值的引用,则是在堆中分配存储单元。
栈在编译的时候就分配好内存空间,在代码中有栈的明确定义;堆是程序运行中动态分配的内存空间,可以根据程序运行情况动态分配内存空间的大小。因此,值类型总是在内存中占用一个预定义的字节数,而引用类型的变量则在堆中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的地址,及存放此变量实际值的地方。
算术运算符
- /***
- * 小技巧:
- * ctrl+k+c 批量注释
- * ctrl+k+u 批量去除注释
- *
- *
- */
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace demo
- {
- class Program
- {
- static void Main(string[] args)
- {
- //算术运算符 二元
- int a = 10;
- int b = 5;
- Console.WriteLine("a+b=" + (a + b));
- Console.WriteLine("a+b={0}", a + b);//15
- Console.WriteLine("a-b={0}", a - b);//5
- Console.WriteLine("a*b={0}", a * b);//50
- Console.WriteLine("a/b={0}", a / b);//2
- Console.WriteLine("a%b={0}", a % b);//0
- //一元运算符
- int c = 8;
- int d = c++;
- //相当于 int d = c; d = 8
- // c++; c = 9
- int e = ++c;
- //相当于 c = c + 1; c = 10
- // int e = c; e = 10
- Console.WriteLine("d={0}", d);//d = 8
- Console.WriteLine("c={0}", c);//c = 10
- Console.WriteLine("e={0}", e);//e = 10
- }
- }
- }
关系、逻辑运算符
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace demo
- {
- class Program
- {
- static void Main(string[] args)
- {
- int a = 10;
- int b = 5;
- Console.WriteLine("a > b : " + (a > b));
- Console.WriteLine("a > b : {0}", a > b);
- //输出a > b : True
- Console.WriteLine("{0}", (a > b) && (b < a));//Ture 逻辑与
- Console.WriteLine("{0}", (a > b) && (b > a));//False
- Console.WriteLine("{0}", (a > b) || (b > a));//Ture 逻辑或
- Console.WriteLine("{0}", ! (a > b)); //False逻辑非
- }
- }
- }
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
数据类型在一定的条件下是可以相互转换的,如将int型数据转换成double型数据。C#允许使用两种转换方式:隐式转换和显式转换。
1、隐式转换
隐式转换:从类型A到类型B的转换可以在所有情况下进行,执行转换的规则非常简单,可以让编译器执行转换。
隐式转换不需要做任何工作,也不需要另外编写代码。如将int型数据转换成double型数据:
int a = 10; double b = a;//隐式转换
隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。基于这个转换规则,C#的隐式转换不会导致数据丢失。需要注意的是我们最常用的简单类型bool和string没有隐式转换。
2、显式转换
显式转换:从类型A到类型B的转换只能在某些情况下进行,转换规则比较复杂,应进行某种类型的额外处理。显式转换又叫强制类型转换,显式转换需要用户明确的指定转换类型。如将double类型数据转换成int类型数据:
double c = 10.5; int d = (int)c;//显示转换
提醒:
(1)、显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。
(2)、强制类型转换会造成数据丢失,如上面的例子中,最终得到的d值为10。
3、通过方法进行类型转换
(1)、使用ToString()方法。所有类型都继承了Object基类,所以都有ToString()这个方法(转化成字符串的方法)。
(2)、通过int.Parse()方法转换,参数类型只支持string类型。注意:使用该方法转换时string的值不能为为NULL,不然无法通过转换;另外string类型参数也只能是各种整型,不能是浮点型,不然也无法通过转换 (例如int.Parse("2.0")就无法通过转换)。
int i; i = int.Parse("100");
(3)、通过int.TryParse()方法转换,该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。也就是说int.TryParse()方法比int.Parse()方法多了一个异常处理,如果出现异常则返回false,并且将输出参数返回0。
int i; string s = null; int.TryParse(s,out i);
(4)、通过Convert类进行转换,Convert类中提供了很多转换的方法。使用这些方法的前提是能将需要转换的对象转换成相应的类型,如果不能转换则会报格式不对的错误。注意:使用Convert.ToInt32(double value)时,如果 value 为两个整数中间的数字,则返回二者中的偶数;即 4.5 转换为 4,而 5.5 转换为 6。
(5)、实现自己的转换,通过继承接口IConventible或者TypeConventer类,从而实现自己的转换。
4、使用AS操作符转换
使用AS操作符转换,但是AS只能用于引用类型和可为空的类型。使用as有很多好处,当无法进行类型转换时,会将对象赋值为NULL,避免类型转换时报错或是出异常。C#抛出异常在进行捕获异常并进行处理是很消耗资源的,如果只是将对象赋值为NULL的话是几乎不消耗资源的(消耗很小的资源)。
5、装箱和拆箱
装箱和拆箱在值类型和引用类型之间架起了一座桥梁,使得任何 value-type 的值都可以转换为 object 类型的值,反过来转换也可以。
装箱:装箱是指将一个值类型的数据隐式地转换成一个对象类型(object)的数据。执行装箱操作时不可避免的要在堆上申请内存空间,并将堆栈上的值类型数据复制到申请的堆内存空间上,这肯定是要消耗内存和cpu资源的。注意:在执行装箱转换时,也可以使用显式转换。
拆箱:拆箱是指将一个对象类型的数据显式地转换成一个值类型数据。拆箱过程是装箱的逆过程,是将存储在堆上的引用类型值转换为值类型并赋给值类型变量。拆箱操作分为两步:一是检查对象实例,确保它是给定值类型的一个装箱值;而是将该值从实例复制到值类型变量中。
装箱和拆箱都是要消耗内存和cpu资源的,也就造成效率降低,所以要尽量避免使用。
这一段出处:https://www.cnblogs.com/share-IT/
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
C#运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和除,再执行加减运算。
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
---|---|---|---|---|---|
1 | [] | 数组下标 | 数组名[整型表达式] | 左到右 | |
() | 圆括号 | (表达式)/函数名(形参表) | |||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | 单目运算符 | ||
-- | 自减运算符 | --变量名/变量名-- | 单目运算符 | ||
* | 取值运算符 | *指针表达式 | 单目运算符 | ||
& | 取地址运算符 | &左值表达式 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof表达式/sizeof(类型) | |||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式%整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | << | 左移 | 表达式<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 表达式>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
< | 小于 | 表达式<表达式 | 双目运算符 | ||
<= | 小于等于 | 表达式<=表达式 | 双目运算符 | ||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!=表达式 | 双目运算符 | ||
8 | & | 按位与 | 整型表达式&整型表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 整型表达式^整型表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 整型表达式|整型表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1?表达式2:表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
<<= | 左移后赋值 | 变量<<=表达式 | |||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。