Web开发之C#:(5)C#值类型
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];