super1 发表于 2022-1-25 10:50

C# 变量

参考Unity 3D C# 脚本基础
一、变量类型

1.整数类型


C# 将整数分为 8 种类型,如下表所示。使用时,根据数值的可能大小,选择范围最小的类型,一般常用的类型为 short、int 和 long 3 种。
sbyte 有符号 8 位整数   -128 127 byte无符号 8 位整数   0 255 short 有符号 16 位整数-3276832767 ushort    无符号 16 位整数065535 int   有符号 32 位整数-21474896482147483647 uint无符号 32 位整数042994967295 long有符号 64 位整数-2 2 ulong 无符号 64 位整数0 2
int age=5; byte classSize=23; ushort student=2344; 2.浮点类型


float   32位单精度浮点类型-22
double64位单精度浮点类型-22
float angles=36.5f; double rate=0.253D; 3.布尔类型

bool b=true; 4.字符类型


为保存单个字符,C#支持字符(char)类型,字符类型的字面量是用单引号括起来的。一些特殊字符要用反斜线\后跟一个字符表示,称为转义字符,如下表所示。
\'单引号 \"双引号 \\反斜线 \0空 \a报警 \b退格 \f换页 \n换行 \r回车 \t水平制表符 \v垂直制表符 5.引用类型


引用类型是构建 C# 应用程序的主要数据类型,C#的所有引用类型均派生自 System.Object
6.枚举


使用枚举类型可以增强程序的可读性,在 C# 中使用关键字 enum 类声明枚举类型的变量,格式如下:
enum枚举名称 {常量1=值1; 常量2=值2; ? 常量n=值n }
参考 C#枚举高级战术

枚举类型的作用是限制其变量只能从有限的选项中取值,这些选项(枚举类型的成员)各自对应于一个数字,数字默认从 0 开始,并以此递增。例如:
public enum Days {   Sunday, Monday, Tuesday, // ... }
其中 Sunday 的值是 0,Monday 是 1,以此类推。为了一眼能看出每个成员代表的值,一般推荐显示地将成员值写出来,不要省略:
public enum Days {   Sunday = 0, Monday = 1, Tuesday = 2, // ... }
C# 枚举成员的类型默认是 int 类型,通过继承可以声明枚举成员为其它类型,比如:
public enum Days : byte {   Monday = 1,   Tuesday = 2,   Wednesday = 3,   Thursday = 4,   Friday = 5,   Saturday = 6,   Sunday = 7 }
枚举类型一定是继承自 byte、sbyte、short、ushort、int、uint、long 和 ulong 中的一种,不能是其它类型。下面是几个枚举的常见用法(以上面的 Days 枚举为例):
// 枚举转字符串 string foo = Days.Saturday.ToString(); // "Saturday" string foo = Enum.GetName(typeof(Days), 6); // "Saturday" // 字符串转枚举 Enum.TryParse("Tuesday", out Days bar); // true, bar = Days.Tuesday (Days)Enum.Parse(typeof(Days), "Tuesday"); // Days.Tuesday// 枚举转数字 byte foo = (byte)Days.Monday; // 1 // 数字转枚举 Days foo = (Days)2; // Days.Tuesday// 获取枚举所属的数字类型 Type foo = Enum.GetUnderlyingType(typeof(Days))); // System.Byte// 获取所有的枚举成员 Array foo = Enum.GetValues(typeof(MyEnum); // 获取所有枚举成员的字段名 string[] foo = Enum.GetNames(typeof(Days));
另外,值得注意的是,枚举可能会得到非预期的值(值没有对应的成员)。比如:
Days d = (Days)21; // 不会报错 Enum.IsDefined(typeof(Days), d); // false
即使枚举没有值为 0 的成员,它的默认值永远都是 0。
var z = default(Days); // 0
枚举可以通过 Description、Display 等特性来为成员添加有用的辅助信息,比如:
public enum ApiStatus {      OK = 0,      NotFound = 2,      AccessDenied = 3 }static class EnumExtensions {   public static string GetDescription(this Enum val)   {         var field = val.GetType().GetField(val.ToString());         var customAttribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute));         if (customAttribute == null) { return val.ToString(); }         else { return ((DescriptionAttribute)customAttribute).Description; }   } }static void Main(string[] args) {   Console.WriteLine(ApiStatus.Ok.GetDescription()); // "成功" } 二、变量声明

1.修饰


private(默认修饰符),只能在本类中访问。
proected,只能在类或派生类中访问。
internal,只能在本项目中访问。
如果想让脚本中定义的变量在 Unity 3D 中的 Inspector 面板上显示,必须用 public 修饰。
//public 变量不想在编辑器中显示 public int A; //private变量想在编辑器中显示 //范围 private int b; 2.var


参考 C#中 Var关键字
Var是C#3.5新增的一个关键字,用来代替某些具体的类型,由编译器自动判断变量类型,编译器可以根据变量的初始化值“推断”变量的类型。

其主要作用有2个:
代替具体类型,实现快速编程的隐式类型用法,常见在foreach便历中,实质是VS编译器给我们提供的一个语法糖。 和new 一起使用,来实现一个匿名类型,用来代替需要预先创建的实体类,灵活高效。

隐式类型用法:
var a=1;//int a=1; var b="1";//string a="1"; var c=DateTime.Today;//DateTime c=DateTime.Today;
在定义一个具体类型的变量时,可以利用var来代替实际的真正类型,如上,//前面与后面的代码完全等价,编译器会自动根据后面的变量值的类型帮我们转换成最匹配的类型,属于一个与语法糖。

注意点:
无法使用var来定义一个全局变量,只能定义在方法的内部(因为预先不可知,所以预先不可置) 不能用来定义函数的签名,包括返回值,参数类别 在定义变量的时候,必须先给值,不能为null,也不能只定义不给值。 一旦一个变量被定义成var类型,并确定了指定的类型以后,不能再给这个变量其他类型的值。例: var a="1";a=1;(错误:无法将类型“XX”隐式转换成“YY”)

在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名类的语法中并没有为其命名,而是直接的一个new { }就完事了。从外部看来,我们根本无法知道这个类是干神马的,也不知道它有何作用。
var annoyCla1 = new   {         ID = 10010,         Name = "EdisonChou",         Age = 25   };Console.WriteLine("ID:{0}-Name:{1}-Age:{2}", annoyCla1.ID,annoyCla1.Name, annoyCla1.Age);
经过调试运行,我们发现匿名类完全可以实现具名类的效果。
页: [1]
查看完整版本: C# 变量