1:类型比较
所有对象都从Object对象中继承了GetType()方法了。结合typeof()运算符,就可以进行类型比较了。
A testA=new A(); if(testA.GetType()==typeof(A)) { Console.WriteLine("类型一样"); }
2:封箱拆箱
封箱:把值类型转化为object类型
拆箱:把object装换为值类型
注意:以封箱变量而建成的类对象,其实是值类型拷贝的一个引用!就是说,引用的不是值类型本体。如代码:
namespace interface_ns { public struct struct_A { public string name; } class Program { static void Main(string[] args) { struct_A testBox = new struct_A(); testBox.name = "zhifeiya_A"; Object object_Box = (Object)testBox; Console.WriteLine("第1次查看name:"+testBox.name); testBox.name = "zhifeiya_B"; struct_A testBox2 = (struct_A)object_Box; Console.WriteLine("第2次查看name:" + testBox2.name); Console.Read(); } } }
结果:
3: is运算符
is运算符并不是说明对象是哪个类型,而是判断给定对象是否是给定类型的对象,或者可以传换为给定的类型。
返回的是bool型
语法:if(对象 is 类型){ 。。。 }
使用范围: 类,接口,值类型。
namespace interface_ns { public struct struct_A { public string name; } class Program { static void Main(string[] args) { struct_A testBox = new struct_A(); if(testBox is Object) { Console.WriteLine("testBox能够封箱到Object"); } if(testBox is struct_A) { Console.WriteLine("testBox是struct_A类型的"); } Console.Read(); } } }
结果:
4:运算符重载
同函数重载
注意:运算符重载必须静态的!不解释。
并非所有的运算符都能重载 eg:+=运算符 , &&运算符 ,= 运算符, ||运算符
一般参数的个数和重载的运算符的“元数”有关。如:一元一个参数,二元2个参数
有些运算符必须成对的重载 例如: 大于号“>” 和 小于号 "<"
namespace interface_ns { public class class_A { public string name; public static class_A operator +(class_A a1,class_A a2) { class_A a = new class_A(); a.name = a1.name + a2.name; return a; } } class Program { static void Main(string[] args) { class_A a1 = new class_A(); a1.name = "zhifeiya"; class_A a2 = new class_A(); a2.name = "harper"; class_A a = a1 + a2; Console.WriteLine(a.name); Console.Read(); } } }
运行结果:zhifeiyaharper