C# 变量

作者: 合肥黑 | 来源:发表于2022-01-24 09:06 被阅读0次

参考Unity 3D C# 脚本基础

一、变量类型
1.整数类型

C# 将整数分为 8 种类型,如下表所示。使用时,根据数值的可能大小,选择范围最小的类型,一般常用的类型为 short、int 和 long 3 种。

  • sbyte 有符号 8 位整数 -128 〜127
  • byte 无符号 8 位整数 0 〜255
  • short 有符号 16 位整数 -32768〜32767
  • ushort 无符号 16 位整数 0〜65535
  • int 有符号 32 位整数 -2147489648〜2147483647
  • uint 无符号 32 位整数 0〜42994967295
  • long 有符号 64 位整数 -2⁶³ 〜2⁶³
  • ulong 无符号 64 位整数 0 〜2⁶⁴
int age=5;
byte classSize=23;
ushort student=2344;
2.浮点类型

float 32位单精度浮点类型 -2¹²⁸〜2¹²⁸
double 64位单精度浮点类型 -2¹⁰²⁴〜2¹⁰²⁴

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
{
    [Description("成功")]
    OK = 0,
    [Description("资源未找到")]
    NotFound = 2,
    [Description("拒绝访问")]
    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(默认修饰符),只能在本类中访问。
protected,只能在类或派生类中访问。
internal,只能在本项目中访问。
如果想让脚本中定义的变量在 Unity 3D 中的 Inspector 面板上显示,必须用 public 修饰。

//public 变量不想在编辑器中显示
[HideInInspector]
public int A;
//private变量想在编辑器中显示
[SerializeField]
[Range(1,100)]//范围
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);

经过调试运行,我们发现匿名类完全可以实现具名类的效果。

相关文章

网友评论

      本文标题:C# 变量

      本文链接:https://www.haomeiwen.com/subject/qsxyaltx.html