当前位置: 首页 > article >正文

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# 的关键字(如 intclass 等),除非使用 @ 前缀(如 @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


http://www.kler.cn/a/598082.html

相关文章:

  • nacos-actuator漏洞
  • 国产芯片解析:沁恒USB PD无线充电功率芯片新势力:CH271与CH275
  • 【Go】Go语言结构体笔记
  • 自定义mavlink 生成wireshark wlua插件错误(已解决)
  • HTTP长连接与短连接的前世今生
  • 2025年01月02日浙江鼎永前端面试
  • 大模型RLHF训练-PPO算法详解:Proximal Policy Optimization Algorithms
  • Linux shell脚本2-test条件测试语句:文件类型、字符串是否相等、数字大小比较、多重条件判断,测试语句验证
  • Xss Game1-8关通关
  • IM 基于 WebRtc 视频通信功能
  • Mongodb分片模式部署
  • CATIA二次开发:基于牛顿迭代法的参数化衰减球体生成系统
  • 【Flask公网部署】采用Nginx+gunicorn解决Flask框架静态资源无法加载的问题
  • ECMAScript、DOM和BOM是个啥(通俗地来讲)
  • Netty——NIO 空轮询 bug
  • Redis + 布隆过滤器解决缓存穿透问题
  • Kafka-1
  • Redis、Memcached应用场景对比
  • 字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)
  • 数据结构 -- 线索二叉树