C#控制台应用程序学习——3.23
一、C#类型转换
1、隐式类型转换
(1)隐式类型转换通常发生在以下情况:转换是安全的,不会导致数据丢失且转换是逻辑上合理的。
(2)隐式类型转换遵循以下规则:
从小范围类型到大范围类型:例如,从 int
到 long
,从 float
到 double。
从派生类到基类:例如,从 Dog
类(派生类)到 Animal
类(基类)。
从字面量到兼容类型:例如,整数字面量 10
可以隐式转换为 float
或 double
。
(3)常见的隐式类型转换
数值类型之间的隐式转换
int a = 10;
long b = a; // int 隐式转换为 long
float c = 3.14f;
double d = c; // float 隐式转换为 double
字面量到数值类型的隐式转换
int e = 100; // 字面量 100 隐式转换为 int
double f = 3.14; // 字面量 3.14 隐式转换为 double
派生类到基类的隐式转换
class Animal { }
class Dog : Animal { }
Dog myDog = new Dog();
Animal myAnimal = myDog; // Dog 隐式转换为 Animal
枚举类型到其基础类型的隐式转换
enum Days { Sunday, Monday, Tuesday }
Days day = Days.Sunday;
int dayValue = day; // 枚举类型隐式转换为 int
(4)隐式类型转换是编译器自动进行的类型转换,通常用于从小范围类型到大范围类型的转换。
2、显式类型转换
(1)显式类型转换需要使用强制类型转换操作符 (type)
,或者调用特定的转换方法(如 Convert.ToInt32
)。
(2)常见的显式类型转换
数值类型之间的显式转换
double a = 3.14;
int b = (int)a; // 显式将 double 转换为 int,结果为 3
long c = 10000000000;
int d = (int)c; // 显式将 long 转换为 int,可能导致数据丢失
使用 Convert
类进行显式转换
string str = "123";
int num = Convert.ToInt32(str); // 显式将字符串转换为整数
使用 Parse 方法
string str = "123.45";
double d = double.Parse(str);
使用 TryParse 方法
string str = "123.45";
double d;
bool success = double.TryParse(str, out d);
if (success) {
Console.WriteLine("转换成功: " + d);
} else {
Console.WriteLine("转换失败");
}
(3)由于转换是逻辑上不安全的,显式类型转换可能会有以下风险:
数据丢失:例如,将 double
转换为 int
时,小数部分会被截断。
运行时异常:例如,将基类对象转换为派生类对象时,如果对象不是派生类的实例,会抛出 InvalidCastException
。
(4)为了避免显式类型转换的风险,可以使用以下方法:
as
操作符:用于引用类型的转换,如果转换失败,返回 null
。
Animal myAnimal = new Dog();
Dog myDog = myAnimal as Dog; // 安全转换,如果失败返回 null
is
操作符:用于检查对象是否可以转换为指定类型。
if (myAnimal is Dog)
{
Dog myDog = (Dog)myAnimal; // 安全转换
}
二、C#变量声明
1、C# 中的变量名必须遵循以下规则:
(1)变量名必须以字母、下划线 _
或 @
开头。
(2)变量名只能包含字母、数字和下划线。
(3)变量名不能是 C# 的关键字(如 int
、class
等),除非使用 @
前缀(如 @int
)。
(4)变量名区分大小写(例如 age
和 Age
是两个不同的变量)。
int age; // 合法
int _age; // 合法
int @int; // 合法(使用 @ 前缀)
int 1age; // 非法(不能以数字开头)
int my-age; // 非法(不能包含减号)
2、常见数据类型
(1)数值类型:int、long、float、double、decimal(128 位高精度浮点数);
(2)字符串类型:string;
(3)字符类型:char;
(4)布尔类型:bool
,只能是 true
或 false;
(5)其他类型:object
:所有类型的基类;var
:隐式类型变量。
3、变量的作用域
(1)局部变量:在方法、构造函数或代码块中定义的变量,只能在其定义的范围内访问。
(2)成员变量:在类中定义的变量,可以在类的所有方法中访问。
(3)全局变量:C# 中没有真正的全局变量,但可以通过 static
关键字定义类级别的静态变量。
class Program
{
static int globalVar = 100; // 类级别的静态变量
static void Main()
{
int localVar = 50; // 局部变量
Console.WriteLine(localVar); // 输出 50
Console.WriteLine(globalVar); // 输出 100
}
}
4、常量定义
常量是指在程序运行期间值不会改变的变量。使用 const
关键字定义常量。
const double PI = 3.14159; // 定义一个常量 PI