1、变量类型
变量其实通过一个标记调用内存中的值,而变量名就是这个标记的名称,但是万一这个标记已经被提前占用或者解释器认为这个标记是不合法的,那么就会报错。
在C#中,有不同类型的变量(使用不同的关键字定义),例如:
int :存储整数(整数),不带小数,例如,123
或-123
。
double:存储浮点数,带小数,例如,19.99
或-19.99
。
char:存储单个字符,例如,'a'
或'B'
。字符值用单引号引起来。
string:存储文本,例如,“Hello World"
。字符串值用双引号引起来。
bool:存储具有两种状态的值:true
或false
。
2、定义声明变量
要创建变量,必须指定类型并为其分配值:
语法
type variable = value;
其中type是C#的一种类型,例如,int
或string
,而variable
是C#的变量名,例如,x
或name
,=
用于为变量分配值。
要创建一个应存储文本字符串的变量,请看以下示例:
例如,
创建类型为string
的名为name
的变量,并为其分配值"cjavapy"
:
string name = "cjavapy"; Console.WriteLine(name);
要创建一个应该存储数字的变量,请看以下示例:
例如,
创建类型为int
的名为myNum
的变量,并为其分配值15:
int myNum = 15; Console.WriteLine(myNum);
还可以在不分配值的情况下声明变量,然后在以后分配值:
例如,
int myNum; myNum = 15; Console.WriteLine(myNum);
请注意,如果将新值分配给现有变量,它将覆盖以前的值:
例如,
将myNum
的值从15
更改为20
:
int myNum = 15; myNum = 20; // myNum 的值是 20 Console.WriteLine(myNum);
3、const 变量
用const
关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。如果不想之后的代码覆盖现有值,则可以添加const
关键字。
例如,
const int myNum = 15; myNum = 20; // 会报错: The left-hand side of an assignment must be a variable, a property or an indexer
4、其它类型变量
定义声明其它类型变量的示例代码。
例如,
int myNum = 5; double myDoubleNum = 5.99D; char myLetter = 'D'; bool myBool = true; string myText = "Hello";
5、打印输出变量
WriteLine()
方法通常用于显示变量。
要将文本和变量拼接在一起成一个字符串,请使用+
字符:
例如,
String name = "cjavapy"; Console.WriteLine("我是 " + name);
还可以使用+
字符将两个字符串变量拼接成一个字符串:
例如,
string firstName = "cjavapy"; string lastName = ".com"; string fullName = firstName + lastName; Console.WriteLine(fullName);
对于数字值,+
字符用作数学运算符(请注意,此处我们使用int
(整数)变量):
例如,
int x = 5; int y = 6; Console.WriteLine(x + y); // 输出 x + y的值
6、定义声明多个变量
要声明多个相同类型的变量,请使用逗号分隔的列表:
例如,
int x = 5, y = 6, z = 50; Console.WriteLine(x + y + z);
7、C# 标识符
所有C# 变量必须使用唯一的名称标识。
这些唯一的名称称为标识符。
标识符可以是短名称(如x
和y
),也可以是更具描述性的名称。
注意:建议使用描述性名称,以创建可理解和可维护的代码:
例如,
// 通过变量名就知道存的是年龄 int age = 60; // 变量名可以,但是不好理解 int a = 60;
构造变量名称(唯一标识符)的一般规则是:
- 名称可以包含字母,数字,下划线
- 名称必须以字母开头
- 名称应以小写字母开头,并且不能包含空格
- 名称也可以以_开头(但在本教程中我们将不使用它)
- 名称区分大小写( myVar 和 myvar 是不同的变量)
- 保留字(例如,C#关键字,int或bool)不能用作名称
6、C# 局部变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量只在声明它的方法、构造方法或者语句块中可见;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。
例如,
using System; namespace com.cjavapy { public class Test { public void say() { int age = 0;//声明变量需要初始化,没有初始化编译时会报错 age = age + 3; Console.WriteLine("cjavapy的年龄是: " + age); } static void Main(string[] args) { Test test = new Test(); test.say(); } } }
7、实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 当一个对象被实例化之后,每个实例变量的值就跟着确定;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
- 实例变量可以声明在使用前或者使用后;
- 访问修饰符可以修饰实例变量;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
- 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:
ObejectReference.VariableName
。
例如,
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { public class Car { // 实例变量 private string make; private string model; private int year; // 构造函数 public Car(string make, string model, int year) { this.make = make; this.model = model; this.year = year; } // 实例方法来显示车的信息 public void DisplayInfo() { Console.WriteLine( $"Make: {make}, Model: {model},Year: {year}"); } } public class Program { public static void Main() { // 创建 Car 类的实例 Car car1 = new Car("Toyota", "Corolla", 2020); Car car2 = new Car("Ford", "Mustang", 2022); // 调用实例方法显示信息 car1.DisplayInfo(); car2.DisplayInfo(); } } }
8、类变量(静态变量)
1)类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
2)无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
3)静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private
,const
和 static
类型的变量。静态变量初始化后不可改变。
4)静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static
声明变量。
5)静态变量在第一次被访问时创建,在程序结束时销毁。与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为 public
类型。默认值和实例变量相似。数值型变量默认值是 0
,布尔型默认值是 false
,引用类型默认值是 null
。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
6)静态变量可以通过:ClassName.VariableName
的方式访问。
7)类变量被声明为 public static const
类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public
和 const
类型,其命名方式与实例变量以及局部变量的命名方式一致。
例如,
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { class Program { // 静态变量 static int count = 0; // 静态方法 public static void IncrementCount() { count++; } public static void DisplayCount() { Console.WriteLine("Count: " + count); } static void Main() { // 通过类名调用静态方法 Program.IncrementCount(); Program.DisplayCount(); // 输出 Count: 1 } } }
9、类型推断
C# 还支持类型推断,使用 var 关键字可以让编译器根据赋值自动推断变量的类型。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication { class Program { static void Main(string[] args) { var age = 25; // 编译器推断为 int 类型 var name = "cjavapy"; // 编译器推断为 string 类型 Console.WriteLine(name); Console.ReadKey(); } } }