C#(语言编程规范)之----类型和变量

C# 中的类型有两种:值类型 (value type) 和引用类型 (reference type)。值类型的变量直接包含它们的数据,而引用类型的变量存储对它们的数据的引用,后者称为对象。对于引用类型,两个变量可能引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。对于值类型,每个变量都有它们自己的数据副本(除 ref 和 out 参数变量外),因此对一个变量的操作不可能影响另一个变量。

C# 的值类型进一步划分为简单类型 (simple type)、枚举类型 (enum type)、结构类型 (struct type) 和可以为 null 的类型 (nullable type),C# 的引用类型进一步划分为类类型 (class type)、接口类型 (interface type)、数组类型 (array type) 和委托类型 (delegate type)。

八种整型类型分别支持 8 位、16 位、32 位和 64 位整数值的有符号和无符号的形式。

两种浮点类型:float 和 double,分别使用 32 位单精度和 64 位双精度的 IEEE 754 格式表示。

decimal 类型是 128 位的数据类型,适合用于财务计算和货币计算。

C# 的 bool 类型用于表示值为 true 或 false 的布尔值。

在 C# 中,字符和字符串处理使用 Unicode 编码。char 类型表示一个 UTF-16 编码单元,string 类型表示 UTF-16 编码单元的序列。

C# 程序使用类型声明 (type declaration) 创建新类型。类型声明指定新类型的名称和成员。在 C# 类型分类中,有五类是用户可定义的:类类型 (class type)、结构类型 (struct type)、接口类型 (interface type)、枚举类型 (enum type) 和委托类型 (delegate type)。

类类型定义了一个包含数据成员(字段)和函数成员(方法、属性等)的数据结构。类类型支持单一继承和多态,这些是派生类可用来扩展和专用化基类的机制。

结构类型与类类型相似,表示一个带有数据成员和函数成员的结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。

接口类型定义了一个协定,作为一个公共函数成员的命名集。实现某个接口的类或结构必须提供该接口的函数成员的实现。一个接口可以从多个基接口继承,而一个类或结构可以实现多个接口。

委托类型表示对具有特定参数列表和返回类型的方法的引用。通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。

类类型、结构类型、接口类型和委托类型都支持泛型,因此可以通过其他类型将其参数化。

枚举类型是具有命名常量的独特的类型。每种枚举类型都具有一个基础类型,该基础类型必须是八种整型之一。枚举类型的值集和它的基础类型的值集相同。

C# 支持由任何类型组成的一维和多维数组。与以上列出的类型不同,数组类型不必声明就可以使用。实际上,数组类型是通过在某个类型名后加一对方括号来构造的。例如,int[] 是一维 int 数组,int[,] 是二维 int 数组,int[][] 是一维 int 数组的一维数组。

C# 的类型系统是统一的,因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生,而 object 是所有类型的最终基类。引用类型的值都被视为 object 类型,被简单地当作对象来处理。值类型的值则通过对其执行装箱和拆箱操作按对象处理。下面的示例将 int 值转换为 object,然后又转换回 int。

using System;

class Test
{
static void Main() {
     int i = 123;
     object o = i;        // Boxing
     int j = (int)o;      // Unboxing
}
}

当将值类型的值转换为类型 object 时,将分配一个对象实例(也称为“箱子”)以包含该值,并将值复制到该箱子中。反过来,当将一个 object 引用强制转换为值类型时,将检查所引用的对象是否含有正确的值类型,如果有,则将箱子中的值复制出来。

C# 的统一类型系统实际上意味着值类型可以“按需”转换为对象。因为统一,所以使用类型 object 的通用库可以与引用类型和值类型一同使用。

C# 中存在几种变量 (variable),包括字段、数组元素、局部变量和参数。变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量,如下表所示。


变量类型


可能的内容


不可以为 null 的值类型


类型完全相同的值


可以为 null 的值类型


null 值或类型完全相同的值


object


null 引用、对任何引用类型的对象的引用,或者对任何值类型的装箱值的引用


类类型


null 引用、对该类类型的实例的引用,或者对从该类类型派生的类的实例的引用


接口类型


null 引用、对实现该接口类型的类类型的实例的引用,或者对实现该接口类型的值类型的装箱值的引用


数组类型


null 引用、对该数组类型的实例的引用,或者对兼容数组类型的实例的引用


委托类型


null 引用或对该委托类型的实例的引用

时间: 2024-08-21 21:40:14

C#(语言编程规范)之----类型和变量的相关文章

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

C语言编程规范

C语言编程规范 6 函数与过程 6.1 函数的功能与规模设计 函数应当短而精美,而且只做一件事.不要设计多用途面面俱到的函数,多功能集于一身的函数,很可能使函数的理解.测试.维护等变得困难. 6.2 函数的返回值 (1)对于函数的返回位置,尽量保持单一性,即一个函数尽量做到只有一个返回位置.(单入口单出口). 要求大家统一函数的返回值,所有的函数的返回值都将以编码的方式返回. 例如编码定义如下: #define CM_POINT_IS_NULL CMMAKEHR(0X200) : : 参考函数实

Golang语言编程规范

Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰命名法,排斥下划线法. 自定义原则: a.统一工作区间,避免目录及文件名随意 b.规范变量/结构体/方法及接口名 c.规范注释 d.单元测试/程序效率等建议 两个等级: (S)建议,(M)必须.以下是细节. 二.代码组织结构 (M)一个目录只包含一个包,模块复杂拆分子模块/子目录 (S)内部项目GO

C语言编程规范试题(标准答案)

一.单选题(每小题3分,共20小题60分) 1.1-1.5    B D A C B                1.6-1.10    C A D B C 1.11-1.15  A D D C B                1.16-1.20   D A B C A 二.填空题(每空1分,共20空20分) 2.1 通常在设计函数的时候,函数之间要低 耦合 ,函数内部要高 内聚 ,函数之间调用关系要 高 扇入. 合理 扇出. 2.2 为了提高代码的效率,通常要求循环体内工作量 最小化 ,把

C语言编程规范概要

编程规范概要 1. 程序结构清析,简单易懂,单个函数的程序行数不得超过100行. 2. 打算干什么,要简单,直截了当,代码精简,避免垃圾程序. 3. 尽量使用标准库函数和公共函数. 4. 不要随意定义全局变量,尽量使用局部变量. 5. 使用括号以避免二义性. 可读性要求 1.可读性第一,效率第二. 2.保持注释与代码完全一致. 3.每个源程序文件,都有文件头说明,说明规格见规范. 4.每个函数,都有函数头说明,说明规格见规范. 5.主要变量(结构.联合.类或对象)定义或引用时,注释能反映其含义.

C语言编程规范--------5 变量与结构

5.1 谨慎使用全局(公共)变量 (1)去掉没必要的公共变量.公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度. (2)仔细定义并明确公共变量的含义.作用.取值范围及公共变量间的关系.在对变量声明的同时,应对其含义.作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系. (3)明确公共变量与操作此公共变量的函数或过程的关系,如访问.修改及创建等.明确过程操作变量的关系后,将有利于程序的进一步优化.单元测试.系统联调以及代码维护等.这种关系的说明可在注释

C语言编程规范—命名规则

转载自:http://www.cnblogs.com/wfwenchao/p/5209197.html C是一门朴素的语言,你使用的命名也应该这样.与Modula-2和Pascal程序员不同,C程序员不使用诸如"ThisVariableIsATemporaryCounter"这样"聪明"的名字.C程序员应该叫它"tmp",这写起来更简单,也不会更难懂.然而,当面对复杂情况时就有些棘手,给全局变量取一个描述性的名字是必要的.把一个全局函数叫做&qu

GO语言编程基础-复合类型结构体

大家好,我们是链客区块链技术问答社区,今天讲一讲Go语言的基础编程. 链客,有问必答!!! 1 结构体类型 有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性.显然单独定义以上变量比较繁琐,数据不便于管理. 结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合.每个数据称为结构体的成员. 2 结构体初始化 2.1 普通变量 type Student struct { id   int name string sex  

C语言编程规范试题

[说明]: 1.本试题中不考虑头文件引用问题(假定已经包含正确的头文件),C语言的标准函数都可用: 2.如果不特别说明,假定程序运行环境为:操作系统Windows 2000, VC6.0编译环境,缺省为四字节对齐,X86(80586)CPU处理器(32位小字节序处理器): 3.试卷需要回收再利用,请在答题纸上答题: 4.本试题满分为100分,答题时间为90分钟. 一.单选题(每小题3分,共20小题60分) (  )1.1 程序块要采用缩进风格编写,缩进的空格数为几个? A. 2    B. 4