百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

学习笔记之C#基础——变量与常量

bigegpt 2024-08-18 14:05 2 浏览

学习笔记之C#基础——变量与常量

变量本身被用来存储特定类型的数据,可以根据需要随时改变变量中所存储的数据值。变量具有名称、类型和值。变量名是变量在程序源代码中的标识。变量类型确定它所代表的内存的大小和类型,变量值是指它所代表的内存块中的数据。在程序的执行过程中,变量的值可以发生变化。使用变量之前必须先声明变量,即指定变量的类型和名称。

声明变量

C#声明变量是由一个数据类型和后面跟一个或多个变量名组成。

<data_type> <variable_list>;

例如:

int a,b,c; char ch; float f;

变量的初始化(赋值)

C#中使用“="符号来进行赋值,将等号右边的值赋值给左边的变量。

变量可以在声明的同时初始化,例如:

int a=3; float f=3.1;

变量也可以在声明之后再赋值,例如:

int b,c; b=5; c=b;

变量的作用域

C#变量一般分为”成员变量“和”局部变量“。”成员变量“是在类中声明的,可以供整个类访问。局部变量在方法体类声明的变量,只在方法内部可以访问。作用域如下图所示:

成员变量又分为实例变量和静态变量。静态变量在声明时在变量类型前加上static。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。对于静态变量,除了能在定义它的类内存取,还能直接以“类名.静态变量”的方式在其他类内使用。

class oneclass { int a; //实例变量 static float b; //静态变量 }

数据类型

C#中的变量类型根据其定义可以分为两种:一种是值类型;另一种是引用类型。这两种类型的差异在于数据的存储方式,值类型的变量本身直接存储数据。而引用类型则存储实际数据的引用,程序通过此引用找到真正的数据。

值类型变量主要包含整数类型、浮点类型以及布尔类型等。值类型变量在栈中进行分配。值类型是从System.ValueType类继承而来的类型。

  • 整数类型:
  • 浮点类型:
  • 布尔类型:布尔类型主要用来表示true和false值,一个布尔类型的变量,其值只能是true或者false。

引用类型是构建C#应用程序的主要对象类型数据。在应用程序执行的过程中,预先定义的对象类型以new创建对象实例,并且存储在堆中。堆是一种由系统弹性配置的内存空间,没有特定大小及存活时间,因此可以被弹性地运用于对象的访问。多个引用类型变量可以引用同一对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象。

class oneclass
{
    class Childclass
    {
        public int val=0;    
    }
    static void Main(string[] args)
    {
    int a=0;
    int b=a;
    b=110;
    Childclass cc1=new Childclass();
    Childclass cc2=cc1;
    cc2.val=119;
    Console.WriteLine("Values:{0},{1}",a,b);
    Console.WriteLine("Ref:{0},{1}",cc1.val,cc2.val);
    Console.ReadLine();      
    }
}

运行的结果如下:

由上面的例子可以看出,声明cc2时将cc1赋值给了cc2,后面修改cc2.val的值为119,最后输出cc1.val和cc2.val都是119。这里cc1.val跟着cc2.val变化了。原因就是,引用类型包含的是堆上的数据区域地址的引用,所以在声明cc2并将cc1赋值给它(Childclass cc2=cc1),此时是将cc1的引用给了cc2,也就是cc1和cc2同时指向了堆上的同一数据区域地址,所以不论修改cc1还是cc2,其实都是修改的同一个数据地址的值,从而另一个的值也跟着变化了。

枚举类型是一种独特的值类型,它用于声明一组具有相同性质的常量。

enum week
{
Sun=0,
Mon=1,
Tue=2,
Wed=3,
Thu=4,
Fri=5,
Sat=6
}

类型转换

类型转换就是将一种类型转换成另一种类型,转换可以是隐式转换,也可以是显式转换。

隐式转换就是不需要声明就能进行的转换。

可以进行隐式转换的数据类型表如下:

显式转换也可以称为强制转换,需要在代码中明确地声明要转换的类型。如果要把高精度的变量的值赋给低精度的变量,就需要使用显式转换。

装箱和拆箱

将值类型转换为引用类型的过程叫作装箱,相反,将引用类型转换为值类型的过程叫作拆箱。

     static void Main(string[] args)
    {
        int a = 101;
        Object b = a;//装箱操作
        Console.WriteLine("值变量a:{0},装箱后对象b:{1}", a, b);
        a = 111;
        Console.WriteLine("值变量修改后a:{0},此时对象b:{1}", a, b);
        Console.ReadLine();
    }

运行结果:

运行结果可以看出,值类型变量的值复制到装箱得到的对象中,装箱后改变值类型变量的值,并不会影响装箱对象的值。

class Program
{

    static void Main(string[] args)
    {
        int a = 101;
        Object b = a;//装箱操作
        Console.WriteLine("装箱操作:值变量a:{0},装箱后对象b:{1}", a, b);
        int c = (int)b;
        Console.WriteLine("拆箱操作:装箱后对象b:{0},拆箱到值变量c:{1}", b, c);
        Console.ReadLine();
    }
}

运行结果:

运行结果,不难看出,拆箱后得到的值类型数据的值与装箱对象相等。需要读者注意的是,在执行拆箱操作时要符合类型一致的原则,否则会出现异常。

常量

常量就是其值固定不变的量,而且常量的值在编译时就已经确定了。常量的类型只能为下列类型之一:sbyte、byte、short、ushort、int、uint、long、ulong、char、float、double、decimal、bool、string等。C#中使用关键字const定义常量,并且在创建常量时必须设置它的初始值。

 const double pi = 3.1415; 
const char ch = 'a';

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...