一、变量的声明

访问修饰符  数据类型  变量名;

访问修饰符:public ,private,protected

变量的访问修饰符默认为private

eg:

  1. Public  Int a;

a=10;

  1. Public  int  a=10;

同类型的两个变量声明

  1. Int x=10,y=20;

不同类型的两个变量的声明必须用单独语句

  1. int a=10;

bool y=true;

Bit:比特,是计算机运算的基础;Byte:字节,是计算机文件大小的基本计算单位

1byte=8bit    两个字节是一个汉字

C#检测变量是否初始化的两个方法:

1.变量是类或结构中的字段,如果没有显示初始化,在默认状态下创建这些变量时,其值就是0.

2.方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。此时,初始化不是在声明变量时进行的,但编译器会通过方法检查所有可能的路径。如果检测到局部变量在初始化之前就使用了它的值,就会产生错误。

变量的作用域:

  1. 在类中函数体外声明的变量作用域为整个类
  2. 局部变量存在于声明该变量所在的函数体内或方法结束的封闭话括号之前的作用域内
  3. 在for,while,或类似语句中声明的变量存在于该循环体内

注意:同名的局部变量不能在同一作用域内声明两次,全局变量可以在函数体内在声明一次,此时函数体内的局部变量会隐藏同名的全局变量的值

eg:

class Program

{

public static int Main(string[] args)

{

for (int i = 0; i < 8; i++)

{

Console.WriteLine(i);

}

for (int i = 9; i >=0; i--)

{

Console.WriteLine(i);

}

return 0;

}

}

上述代码正确,因为声明的两个i在不同的for循环中,属于在不同的作用域内,不会发生冲突

eg:

public static int Main()

{

int j = 20;

for (int i = 0; i < 10; i++)

{

int j = 30;

Console.WriteLine(j + i);

}

return 0;

}

以上代码会提示错误,因为声明的两个j在同一作用域内(同在Main方法内)

C#在变量之间有一个基本的区分,它把声明为类型级的变量看作是字段,而把在方法中声明的变量看做局部变量

eg:

class Program

{

int j = 20;

public static void Main(string[] args)

{

int j = 30;

Console.WriteLine(j);

return;

}

}

在上述代码中,不会报错,因为第一个j为类型级的变量,为字段。第二个j在方法中声明,为局部变量,此时程序输出30,因为局部变量j会隐藏同名的全局变量(字段)

引用类别级变量

(1)类名.变量名(静态)

(2)对象名.变量名(非静态)

eg:

static int j = 20;

public static void Main(string[] args)

{

int j = 30;

Console.WriteLine(Program.j);

return;

}

以上代码将输出20,引用了静态变量j

二、常量的声明

在声明和初始化变量时,在变量的前面加上关键字const,就可以把该变量指定为一个常量

常量就是在使用过程中不会发生改变的变量

const 数据类型 常量名 = 常量值;

eg:const  int a=80;

常量的特征:

  1. 常量必须在声明时初始化,指定了其值后,就不能在修改了
  2. 常量的值必须能在编译时用于计算。因此,不能用一个变量中提取的值来初始化常量,如果需要这么做,应是用只读字段
  3. 常量总是静态的,但注意,不能再常量声明中包含修饰符static

在程序中使用常量至少3个好处:

1.常量用易于理解的清楚的名称替换了含义不明确的数字或字符串,使程序更易于阅读。

2.常量使程序更易于修改。例如,在C#程序中有一个x常量,该常量的值为6%。如果以后销售税率发生变化,把新值赋给这个常量。就可以修改所有的税款计算结果,而不必查找整个程序,修改税率为0.06的每个项。

3.常量更容易避免程序出现错误。如果要把另一个值赋给程序中的一个常量,而该常量已经有了一个值,编译器就会报告错误。

 

三、预定义数据类型

1.值类型和引用类型

值类型

表示实际数据

只是将值存放在内存中

值类型都存储在堆栈中

int、char、结构

引用类型

表示指向数据的指针或引用

包含内存堆中对象的地址

为 null,则表示未引用任何对象

类、接口、数组、字符串

eg:

static void Main(string[] args)

{

// 声明一个值类型的整型数据类型

int val = 100;

Console.WriteLine("该变量的初始值为  {0}", val);

Test(val);

// 由于该数据类型属于值类型,所以将恢复其初始值

Console.WriteLine("该变量的值此时为  {0}", val);

}

static void Test(int getVal)

{

int temp = 10;

getVal = temp * 20;

}

eg:

static void Main(string[] args)

{

DataTypeTest objTest = new DataTypeTest();

objTest.Val = 100;

// 传递属于引用类型的对象

Test(objTest);

// 由于该数据类型属于引用类型,所以会考虑新处理的值

Console.WriteLine("变量的值为  {0}", objTest.Val);

}

static void Test(DataTypeTest dataTest)

{

int temp = 10;

dataTest.Val = temp * 20;

}

C#15个预定义类型,其中13个是值类型,2个是引用类型

值类型:Byte  sbyte  Short  ushort  decimal  Int  uint  float  double  char  long  ulong  bool

bool System.Boolean
4Byte 32bit布尔型变量 逻辑值,true或者false,默认值为false
byte System.Byte
1Byte 8bit无符号整数无符号的字节,所存储的值的范围是0~255,默认值为0
sbyte System.SByte 1Byte
8bit有符号整数带符号的字节,所存储的值的范围是-128~127,默认值为0
char System.Char
2Byte 16bit 无符号Unicode字符,默认值为’\0’
decimal System.Decimal
16Byte 128bit十进制数不遵守四舍五入规则的十进制数,28个有效数字,通常用于财务方面的计算,默认值为0.0m
double System.Double
8Byte 64bit双精度的浮点类型,默认值为0.0d
float System.Single
4Byte 32bit单精度的浮点类型,默认值为0.0f
int System.Int32
4Byte 32bit有符号整数,默认值为0
uint System.UInt32
4Byte 32bit无符号整数,默认值为0
long System.Int64
8Byte 64bit有符号整数,默认值为0
ulong System.UInt64
8Byte 64bit无符号整数,默认值为0
short System.Int16
2Byte 16bit有符号整数,默认值为0
ushort System.UInt16
2Byte 16bit无符号整数,默认值为0

引用类型:string  object

string System.String
指向字符串对象的引用,默认值为null

object System.Object
指向类实例的引用,默认值为null

补充:

在C#中,基本数据类型如bool和long都是值类型。如果声明一个bool变量,并给它赋予另一个bool变量的值,在内存中就会有两个bool值。如果以后修改第一个bool变量的值,第二个bool变量的值也不会改变。这些类型是通过值来复制的。

相反,大多数更复杂的C#数据类型,包括我们自己声明的类都是引用类型。它们分配在堆中,其生存期可以跨多个函数调用,可以通过一个或几个别名来访问。CLR执行一种精细的算法,来跟踪哪些引用变量仍是可以访问的,哪些引用变量已经不能访问了。CLR会定期进行清理,删除不能访问的对象,把它们占用的内存返回给操作系统。这是通过垃圾收集器实现的。

C#基础知识(一)自己总结的。。。的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

  10. APP测试入门篇之APP基础知识(001)

    前言        最近两月比较多的事情混杂在一起,静不下心来写点东西,月初想发表一遍接口测试的总结,或者APP测试相关的内容,一晃就月底了,总结提炼一时半会也整不完.放几个早年总结内部培训PPT出来 ...

随机推荐

  1. Jenkins + Github持续集成构建Docker容器,维基百科&人工自能(AI)模块

    本文分两部分,第一部分是手动计划任务的方式构建Github上的Docker程序,第二部分是用Github webhook Trigger一个自动构建任务. Jenkins采用2.5版本Docker采用 ...

  2. Autofac高级用法之动态代理

    前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下称为动态代理)起作用主要是为我们的类生成一个代理类,这个代理类可以在我们调用原本类的方法之前,调 ...

  3. 简述MyBatis的体系结构

    MyBatis体系结构主要由以下几个关键部分: 1.加载配置 配置有两种形式:一种是xml配置文件,另一种是java代码的注解MyBatis将SQL的配置信息加载成为一个个的MappedStateme ...

  4. 【THUWC 2017】在美妙的数学王国中畅游

    数学王国里有n座城市,每座城市有三个参数\(f\),\(a\),\(b\),一个智商为\(x\)的人经过一座城市的获益\(f(x)\)是 若\(f=1\),则\(f(x)=\sin(ax+b)\): ...

  5. [BZOJ4517] [Sdoi2016] 排列计数 (数学)

    Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是 ...

  6. C++通过COM接口操作PPT

    一. 背景 在VS环境下,开发C++代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,先手工创建好PPT模板,在程序中修改模板数据. 二. 开发 ...

  7. ValueError: Cannot feed value of shape ..

    这里x_,y_是两个数字,当我运行时 with tf.Session() as sess: #定义session对象生成器 for step in range(201) : sess.run(trai ...

  8. Several ports (8005, 8080, 8009)被占用

    启动Tomcat服务器报错: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server at localhost are alre ...

  9. 互联网产品mysql数据库设计总结

    mysql数据库性能不比oracle数据库,所以设计上,和oracle有一些不同.下面总结一些互联网产品的数据库设计. 1.主键 主键可以使用bigint(20) unsigned也可以使用varch ...

  10. html学习第一弹の常用标签的归类

    HTML初步学习: 行内元素:只占据他对应标签的边框所包含的空间,默认横向排布. 块级元素:块级元素占据其父元素(容器)的整个空间,因此创建了一个块,通常浏览器会在块级元素前后另起一行,默认竖向排布. ...