c#的属性和反射,大约是啥回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#的属性和反射,大约是啥回事相关的知识,希望对你有一定的参考价值。

我想听你的C#学习经验
大哥,刚好说反了,我要的是attribute那个属性

属性是这样的成员:它们提供灵活的机制来读取、编写或计算私有字段的值。可以像使用公共数据成员一样使用属性,但实际上它们是称作“访问器”的特殊方法。这使得可以轻松访问数据,此外还有助于提高方法的安全性和灵活性。

在本示例中,TimePeriod 类存储一个时间段。在内部,类以秒为单位存储时间,但客户端使用名为 Hours 的属性能够以小时为单位指定时间。Hours 属性的访问器执行小时和秒之间的转换。

class TimePeriod

private double seconds;

public double Hours

get return seconds / 3600;
set seconds = value * 3600;



class Program

static void Main()

TimePeriod t = new TimePeriod();

// Assigning the Hours property causes the 'set' accessor to be called.
t.Hours = 24;

// Evaluating the Hours property causes the 'get' accessor to be called.
System.Console.WriteLine("Time in hours: " + t.Hours);


// Output: Time in hours: 24

http://msdn.microsoft.com/zh-cn/library/x9fsa0sw.aspx

反射(C# 编程指南)

反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
反射在下列情况下很有用:

当需要访问程序元数据中的属性时。请参见主题使用反射访问属性。

检查和实例化程序集中的类型。

在运行时构建新类型。使用 System.Reflection.Emit 中的类。

执行后期绑定,访问在运行时创建的类型的方法。请参见主题动态加载和使用类型。
http://msdn.microsoft.com/zh-cn/library/ms173183.aspx

那个吗····

using System;
using System.Reflection;

// An enumeration of animals. Start at 1 (0 = uninitialized).
public enum Animal

// Pets.
Dog = 1,
Cat,
Bird,


// A custom attribute to allow a target to have a pet.
public class AnimalTypeAttribute : Attribute

// The constructor is called when the attribute is set.
public AnimalTypeAttribute(Animal pet)

thePet = pet;


// Keep a variable internally ...
protected Animal thePet;

// .. and show a copy to the outside world.
public Animal Pet

get return thePet;
set thePet = Pet;



// A test class where each method has its own pet.
class AnimalTypeTestClass

[AnimalType(Animal.Dog)]
public void DogMethod()

[AnimalType(Animal.Cat)]
public void CatMethod()

[AnimalType(Animal.Bird)]
public void BirdMethod()


class Example

public static void Demo(System.Windows.Controls.TextBlock outputBlock)

AnimalTypeTestClass testClass = new AnimalTypeTestClass();
Type type = testClass.GetType();
// Iterate through all the methods of the class.
foreach (MethodInfo mInfo in type.GetMethods())

// Iterate through all the Attributes for each method.
foreach (Attribute attr in
Attribute.GetCustomAttributes(mInfo))

// Check for the AnimalType attribute.
if (attr.GetType() == typeof(AnimalTypeAttribute))
outputBlock.Text += String.Format(
"Method 0 has a pet 1 attribute.",
mInfo.Name, ((AnimalTypeAttribute)attr).Pet) + "\n";





/*
* Output:
* Method DogMethod has a pet Dog attribute.
* Method CatMethod has a pet Cat attribute.
* Method BirdMethod has a pet Bird attribute.
*/
Attribute 类将预定义的系统信息或用户定义的自定义信息与目标元素相关联。目标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接口、方法、可移植可执行文件模块、参数、属性 (Property)、返回值、结构或其他属性 (Attribute)。

属性所提供的信息也称为元数据。元数据可由应用程序在运行时进行检查以控制程序处理数据的方式,也可以由外部工具在运行前检查以控制应用程序处理或维护自身的方式。例如,.NET Framework 预定义属性类型并使用属性类型控制运行时行为,某些编程语言使用属性类型表示 .NET Framework 公共类型系统不直接支持的语言功能。

所有属性类型都直接或间接地从 Attribute 类派生。属性可应用于任何目标元素;多个属性可应用于同一目标元素;并且属性可由从目标元素派生的元素继承。使用 AttributeTargets 类可以指定属性所应用到的目标元素。

Attribute 类提供检索和测试自定义属性的简便方法。
参考技术A please google ->

C# property and reflection tutorial

<-

以上是关于c#的属性和反射,大约是啥回事的主要内容,如果未能解决你的问题,请参考以下文章

程序集和反射(C#)

c#的泛型,委托,反射是啥?

JAVA中反射是啥

C#通过反射获取不同命名空间下的类(属性和方法)

C# 反射和获取属性

c# 如何通过反射 获取属性值