Web开发之C#:(5)C#值类型

作者:陆金龙    发表时间:2016-07-21 00:12   


1.字符 System.Char

说明:

无符号的16位整数,数值范围从0~65535,占2个字节空间。

public struct Char : IComparable, IConvertible, IComparable<char>, IEquatable<char>

{

        //表示 System.Char 的最大可能值。此字段为常数。

        public const char MaxValue = (char)0xffff;   //16^4-1 = 2^16 -1 =65535

        //表示 System.Char 的最小可能值。此字段为常数。

        public const char MinValue = '\0'; // 0

}

方法:

IsControl() //是否控制符

IsDigit()//是否十进制数字类别

IsLetter()//是否字母

IsLetterOrDigit()//是否十进制数字类别或字母

IsLower()//是否小写

IsUpper()//是否大写

IsNumber()// 是否属于数字类别 IsNumber('⑧')为true

 

ToLower()//转为小写

ToUpper()//转为大写

ToString()//转为字符串

char Parse(string s);//从字符串转为字符

bool TryParse(string s, out char result);//从字符串转为字符

赋值:

Char c=’A’;

类型转换:

Char c=(char)65;

Char c =Convert.ToChar(65);

Char c =((IConvertable)65)).ToChar(null);

int i = (int)c;

int i=Convert.ToInt32(c);

int i==((IConvertable)c)).ToInt32(null);

2. String.Int32

Parse

解析字符串获取对象

Int32 x=Int32.Parse("123");

Int32 y = Int32.Parse("1A", System.Globalization.NumberStyles.HexNumber, null);

3.枚举类型

声明:

使用enum关键字声明。

说明:

每个枚举类型从System.Enum类派生,后者从System.ValueType派生。

枚举中不能定义任何方法、属性、事件。

枚举中定义一组常量字段,默认初始字段的值为0,其后的值依次递增。可以为字段指定值,未指定的字段在上一字段基础上增1。

基础类型:

每个枚举类型都有一个基础类型,其基础类型可以是除 Char 外的任何整型。
如果没有显式声明基础类型,则使用 Int32。

方法:

枚举中不能定义方法,但可使用从object中继承的方法,以下是ToString()方法的示例。

class Program

{

    static void Main(string[] args)

    {

        Console.WriteLine(MyColor.Orange.ToString()); //Orange

        Console.WriteLine(MyColor.Orange.ToString("G")); //Orange

        Console.WriteLine(MyColor.Orange.ToString("D")); //1

        Console.WriteLine(MyColor.Orange.ToString("X")); //01

        Console.ReadKey();

    }

 

    enum MyColor : byte

    {

        Red,

        Orange,

        Yellow,

        Green,

    }

}

值的转换(使用Enum类):

将一个符号转换为枚举类型的一个实例:

MyColor c =(MyColor)Enum.Parse(typeof(MyColor),"Orange",true);//最后一个参数 是否忽略大小写

MyColor c =(MyColor)Enum.Parse(typeof(MyColor),"Orange",false);

Enum.TryParse<MyColor>("Orange",out c); //得到MyColor.Orange

Enum.TryParse<MyColor>("1",out c); //得到MyColor.Orange

 

返回枚举的字符串表示:

String s = Enum.GetName(typeof(MyColor), MyColor.Yellow);

String[] arr = Enum.GetNames(typeof(MyColor));

Console.WriteLine(s); //输出 Yellow

Console.WriteLine(String.Join(",",arr));//输出 Red,Orange,Yellow,Green,Blue

4.结构体

特点:

结构是值类型,有值类型的所有特征:继承关系、栈上分配内存、复制传值等。

使用场景:

结构在系统定义中使用较多。

struct 类型适于表示 Point、Rectangle 和 Color 等轻量对象。 例如,如果声明一个 1000 个 Point 对象组成的数组,为了引用每个对象,则需分配更多内存;这种情况下,使用结构可以节约资源。 除非需要引用类型语义,将较小的类改声明为结构,可以提高系统的处理效率。

public struct MyPoint {

public int x, y;

public MyPoint(int p1, int p2)

{

x = p1;

y = p2;

}

public void Method() //->结构中也可以有方法

{

Console.WriteLine("这是结构中的方法!");

}

}

定义结构:

结构体也可以象类一样可以自定义,也可以在名字前面加入控制访问符,默认的结构体名和元素名是private类型。
在结构体中也可以定义静态成员,使用时必须结构名来调用。

不能在结构体定义中直接初始化实例字段。 
在结构体中可以定义构造函数以初始化成员,但不可重写默认无参构造函数和默认无参析构函数。

实例化:

使用 new 运算符:使用参数化构造函数(对于私有成员或不可访问的成员,只能在构造函数中进行初始化),

不使用 new 运算符:在声明结构变量后分别访问成员。在此情况下不存在构造函数调用,因而可以提高分配效率。 

必须先为所有字段赋值,结构才可使用(当结构包含引用类型的成员时,必须显式调用该成员的默认构造函数)。

5.可空值类型

可空类型是一个结构,是值类型,它是包含null的一个值类型。

可空类型可以表示基础类型的所有值,另外还可以表示 null 值。可空类型可通过下面两种方式中的一种声明:

System.Nullable<T> variable 或T? variable

T 是可空类型的基础类型。T 可以是包括 struct 在内的任何值类型;但不能是引用类型。

如:

int? i = 10;

double? d1 = 3.14;

bool? flag = null;

char? letter = 'a';

int?[] arr = new int?[10];