七、C#学习基础篇---反射

其实到这里属于高级语法了,我们再写一个类的时候,不让外界访问的字段和方法用怕private修饰,在一个程序集里我们用internal修饰,这些是正向思维,有没有一种方法,我们可以访问到这些私有字段和方法呢,办法是有的那就是反射,我们通过反射可以访问和修改这些私有属性和方法。
我们可以使用反射动态创建类型的实例,反射可以解析出一个类里的所有内容。反射就是通过类型Type 创建实例。

优点:

1、反射提高了程序的灵活性和扩展性。
2、降低耦合性,提高自适应能力。
3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点:

1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

反射用到的命名空间:
System.Reflection
System.Type
System.Reflection.Assembly

写一个简单的示例:

public  class  Animal
{
    public string Name;
    public byte Age;
    public Animal(string name)
    {
        Console.WriteLine("name is :{0}",name);
    }
    public void Eat()
    {
        Console.WriteLine("eat");
    }
}

使用反射创建这个类:
Type t = Type.GetType(“Animal”);
Animal anim= (Animal)Activator.CreateInstance(t);
调用带参数的构造函数的时候直接给Activator.CreateInstance传入相应的参数,示例如下:
object[] pp=new object[]{“小狗”};
Animal anim= (Animal)Activator.CreateInstance(t,pp);

获取字段
FieldInfo fi = t.GetField(“Name”);
fi.SetValue(anim, “小猪”);

反射在在带来一定优势的基础上也带来了性能损耗,所以在开发过程中,要不要使用该技术,需要斟酌。

反射官方文档:https://msdn.microsoft.com/zh-cn/library/ms173183(VS.80).aspx

反射相关文章:https://www.cnblogs.com/Stephenchao/p/4481995.html
https://www.cnblogs.com/vaevvaev/p/6995639.html
https://www.cnblogs.com/Stephenchao/p/4481995.html

扫描二维码关注公众号,回复: 2584724 查看本文章

猜你喜欢

转载自blog.csdn.net/u011017980/article/details/79424197