读书人

c#语法-二 (c#高级编程)

发布时间: 2012-08-27 21:21:57 作者: rapoo

c#语法-2 (c#高级编程)

1.c#运算符

??? checked--溢出检查

??? is --判断是否类型对象???

??? as -引用类型的显式类型转换

2.委托--只是包含方法地址的对象类型

3.抽象类里访问的类必须是public的,否则就报编译错误:可访问性不一致。

4.正则表达式-“\b"正则开始和结束标识, “*"匹配所有字符,正则命名空间:System.Text.RegularExpressions;

5.System.Collections对象类型,泛型集合类System.Collections.Generic

6.c#里也有指针,不过要把项目属性改成可以运行不安全代码。也有析构函数不过要实现IDisposeable接口。

7.反射:和java反射类似

一.什么是反射

????? 在运行时环境,能否根据一个类的名字,来得到这个类的属性和方法?对于任何一个运行时的对象能否动态调用这个对象的方法?答案是可以的。这种动态的获取类的信息以及动态调用一个对象的方法的机制叫做反射。

????? 反射提供的主要功能:

????? 1.在运行时判断任意一个对象所属的类

????? 2.在运行时构造一个类的对象

????? 3.在运行时判断一个类所具有的属性和方法

????? 4.在运行时调用一个对象的方法

?

????? 实现反射的过程:

????? 1.加载一个类

????? 2.根据这个类动态创建一个对象

????? 3. 动态得到这个对象的方法

????? 4.调用这个对象的方法

?

二.JAVA中的反射

需要导入包:import java.lang.reflect;

try {

//加载类的三种方法
//???Class<?> classType = Class.forName("com.ls.reflecttest.Person");

//???Class<?> classType = Person.class;

?????Class<?> classType = Person.getClass();
//创建对象,第一种方法只能调用默认的构造方法,第二种方法可以调用带参的构造方法
//???Object object = classType.newInstance();
???Object object = classType.getConstructor(new Class[] {int.class, String.class, int.class}).newInstance(new Object[] {12, "wdw", 12});

//动态得到该对象的方法
???Method sayHelloMethod = classType.getMethod("sayHello", new Class[]{String.class});
???
???sayHelloMethod.invoke(object, new Object[] {"wdw"});
???
//动态得到所有属性,??
???Field[] filds = classType.getDeclaredFields();
???
???for(int i=0; i < filds.length; i++) {
????System.out.println(filds[i].getName());
???}
??} catch (Exception e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}

此外还有很多方法:得到所有方法getDeclaredMethods(),? getField()等等

?

三.C#中的反射

???感觉跟JAVA中的反射机制是一样的,首先引入命名空间:using System.reflection;


?? //得到类型
?? Type type = Type.GetType("ReflectTest.Person");
?? //得到该类型所在的程序集
?? Assembly assembly = Assembly.GetAssembly(type);//类似于JAVA中的加载

?

?? //C#中可以直接加载文件

?? //Assembly assembly = Assembly.LoadFile("文件路径"); //JAVA中没有这种方法


?? //创建对象
???Object o = assembly.CreateInstance("ReflectTest.Person");
?? //动态获得方法
???MethodInfo method = type.GetMethod("ToString");
?? //调用方法
???Console.WriteLine(method.Invoke(o, new object[] { }));

?

四.总结

??? 原来各种语言都是相同的,反射机制也是一样的只不过换了几个类,几个方法名而已,慢慢体会其实不单单是反射机制,两种语言有很多相同之处,思想都是一样的,继续努力,加油!对比原来的java框架,看是否能改造目前c#框架至少把反射使用

?

?

?

?

?

?

?

读书人网 >编程

热点推荐