1)Nullable类型
一个Nullable类型就是基本类型加上一个“是否为null指示器”的合成类型。对于一个类型,如果既可以给它分配一个值,也可以给它分配null引用(表示没有任何值),我们就说这个类型是可以空的。因此,可空类型可表示一个值,或表示不存在任何值。例如,类似String的引用类型就是可空类型,而类似Int32的值类型不是可空类型。由于值类型的容量只够表示适合于该类型的值,因此它不可为空。
有些人认为int型变量的值为0就表示空,这是不对的,0也是它的值,而并不表示空。
看下面的代码演示:
- static void Main(string[] args)
- {
-
-
- int? oneValue = null;
-
-
- if (oneValue.HasValue)
- {
-
-
- Console.WriteLine(oneValue.Value);
- }
- else
- {
- Console.WriteLine("oneValue的值为空!");
- }
- }
2)C#的溢出检查
当一种整型转换到另一种整型,这个过程取决于溢出检查上下文。checked关键字用于对整型算术运算和转换显式启用溢出检查,而unchecked关键字则用于取消整型算术运算和转换的溢出检查。
①启用溢出检查:当操作数的值在目标类型的取值范围内,则转换成功,否则将要抛出异常。
看下面代码演示:
- class TypeConvert
- {
- static void Main(string[] args)
- {
- TypeConvert typeConvert = new TypeConvert();
- typeConvert.DoSomething();
- }
-
- public void DoSomething()
- {
-
- try
- {
- int MyInt = int.MaxValue;
- byte MyByte = checked((byte)MyInt);
- }
- catch(OverflowException)
- {
- throw;
- }
- }
- }
在代码中MyInt的最大值是2147483647,在强制转换为byte类型后,由于byte的取值范围为0-255,在这里使用了checked关键字进行了溢出检查,这里的byte型MyByte型无法容纳远大于其容量的值而抛出异常。
②取消溢出检查
在类型转换的过程中不检查数据是否超过目标数据类型的最大值,意味着类型转换永远是成功的。如果源数据类型的取值范围大于目标类型的取值范围,超过的部分将会被截取掉;如果源数据的取值范围小于目标类型的,转换后将使用符号或者零填充至与目标类型的大小相等;如果等于,则直接转换成目标类型
看实例代码如下:
- class TypeConvert
- {
- static void Main(string[] args)
- {
- TypeConvert typeConvert = new TypeConvert();
- typeConvert.DoSomething();
- }
-
- public void DoSomething()
- {
-
- try
- {
- int MyInt = int.MaxValue;
-
-
- byte MyByte = (byte)MyInt;
-
- }
- catch(OverflowException)
- {
- throw;
- }
- }
- }
③typeof运算符
typeof是一元运算符,用于返回任意一个类型的类型信息
typeof运算符的语法如下: Type type=typeof(类型);
示例代码演示如下:
- class Program
- {
- static void Main(string[] args)
- {
- Type t = typeof(Program);
- Console.WriteLine("方法:");
-
- MethodInfo[] methodInfo = t.GetMethods();
-
- foreach (MethodInfo mInfo in methodInfo)
- {
- Console.WriteLine(mInfo.ToString());
- }
-
- Console.WriteLine("成员:");
- MemberInfo[] memberInfo = t.GetMembers();
-
- foreach (MemberInfo mInfo in methodInfo)
- {
- Console.WriteLine(mInfo.ToString());
- }
-
- Console.ReadKey();
- }
- }
运行结果如下图:
④运算符的重载
运算符重载只能应用于类或结构。要重载一个运算符,可以声明一个名为operator X的方法并实现它,如operator +和operator -,一元运算符和二元运算符都可以被重载,相应地,重载方法分别带一个或者两个参数(类或者结构类型),其语法为:
//一元运算符的重载 public static 自定义类型 operator 要重载的运算符(类型) //二元运算符的重载 public static 自定义类型 operator 要重载的运算符(类型1,类型2)
注意:所有运算符的重载均是静态的方法,必须得用public修饰
代码示例如下:
- class Program
- {
- public int Value { get;set; }
-
- static void Main(string[] args)
- {
- Program o1 = new Program();
- o1.Value = 10;
- Program o2 = new Program();
- o2.Value = 20;
-
- Program o3 = o1 + o2;
- Console.WriteLine(o3.Value);
- Console.ReadKey();
- }
-
-
-
-
-
-
-
- public static Program operator +(Program o1, Program o2)
- {
- Program o = new Program();
- o.Value = o1.Value + o2.Value;
- return o;
- }
- }
本文转自yisuowushinian 51CTO博客,原文链接:http://blog.51cto.com/yisuowushinian/1040068,如需转载请自行联系原作者