C#学习笔记(比较)

1 封箱和拆箱

  封箱(boxing)是把值类型转换为System.Object类型,或者转换为由值类型实现的接口类型。拆箱(unboxing)是相反的过程。

封箱:

struct myStruct

{

  public int Val;

}

把结构放在object类型的变量中,以封箱

myStruct valtype1 = new myStruct();

valtype1.Val = 5;

object.refType = valType1;

拆箱:
valType1.Val = 6;

myStruct valType2 = (myStruct)refType;

Console.WriteLine("valtype2.Val = {0}",valType2.Val);

输出结果:

valType2.Val = 5;

注意:如果修改上面结构体为类类型

class myStruct

{

  public int Val;

}

就会出现下面的输出结果:

valType2.Val = 6;

也可以把值类型封装到一个接口类型中,只有他们实现这个接口就行。

interface IMyInterface

{

}

struct myStruct : IMyInterface

{ 

  public int Val; 

}

接着把结构封装到一个IMyInterface类型中

myStruct valType1 = new myStruct();

IMyInterface refType = valType1;

然后用一般的数据类型转换语法拆箱他

myStruct valType2 = (myStruct)refType;

2 is运算符

<operand> is <type>

3 值比较

3.1 运算符重载(operator overloading)

  要重载运算符,可给类添加运算符类型成员(他们必须是static)。一些运算符有多种用途,因此我们还指定了要处理多少个操作数,以及这些操作数的类型。一般情况下,操作数的类型与定义运算符的类相同,但也可以定义处理混合类型的运算符。

实例:

public class AddClass1

{

  public int val;

  public static AddClass1 operator + (AddClass1 op1,AddClass1 op2)

  {

    AddClass1 returnVal = new AddClass1();

    returnVal.val = op1.val + op2.val;

    return returnVal;

  }

}

重载所有的二元运算符都是一样的,一元运算符看起来也是类似的,只有一个参数。

原文地址:https://www.cnblogs.com/DannyShi/p/4501705.html