首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

UNITY C# -如何获得一个类的实例的所有字段,并标记我的自定义属性(字段)?

在Unity中,可以使用反射来获取一个类的实例的所有字段,并标记自定义属性。

首先,需要使用GetType()方法来获取类的Type对象,然后使用GetFields()方法来获取所有公共字段。如果需要获取私有字段,可以使用GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

接下来,可以使用GetCustomAttributes()方法来获取字段上的所有自定义属性。该方法返回一个数组,包含所有应用于该字段的自定义属性。

以下是一个示例代码:

代码语言:txt
复制
using System;
using System.Reflection;

public class MyClass
{
    public int myIntField;
    [MyCustomAttribute]
    public string myStringField;
    private float myPrivateFloatField;
}

public class MyCustomAttribute : Attribute
{
    // 自定义属性的内容
}

public class Example
{
    public static void Main()
    {
        MyClass myObject = new MyClass();

        Type type = myObject.GetType();
        FieldInfo[] fields = type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

        foreach (FieldInfo field in fields)
        {
            Console.WriteLine("Field Name: " + field.Name);

            object[] attributes = field.GetCustomAttributes(true);
            foreach (object attribute in attributes)
            {
                Console.WriteLine("Attribute: " + attribute.GetType().Name);
            }
        }
    }
}

在这个示例中,我们创建了一个名为MyClass的类,包含了几个字段和一个自定义属性MyCustomAttribute。然后,使用反射获取了MyClass实例的所有字段,并遍历每个字段,打印字段名称和应用于该字段的所有自定义属性。

请注意,这个示例只是演示了如何使用反射获取一个类的实例的字段和自定义属性,并没有涉及腾讯云相关产品。具体的腾讯云产品和相关链接需要根据具体的应用场景来选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Unity Excel转json且自动生成C#脚本

    生成的json文件: [{“ID”:“10001”,“Name”:“a”,“Explain”:“卡牌a”},{“ID”:“10002”,“Name”:“b”,“Explain”:“卡牌b”},{“ID”:“10003”,“Name”:“c”,“Explain”:“卡牌c”},{“ID”:“10004”,“Name”:“d”,“Explain”:“卡牌d”},{“ID”:“10005”,“Name”:“e”,“Explain”:“卡牌e”},{“ID”:“10006”,“Name”:“f”,“Explain”:“卡牌f”},{“ID”:“10007”,“Name”:“g”,“Explain”:“fas”},{“ID”:“10008”,“Name”:“h”,“Explain”:“gbfdsg”},{“ID”:“10009”,“Name”:“i”,“Explain”:“ewtg”},{“ID”:“10010”,“Name”:“j”,“Explain”:“sgs”},{“ID”:“10011”,“Name”:“k”,“Explain”:“mje”},{“ID”:“10012”,“Name”:“l”,“Explain”:“归属感”},{“ID”:“10013”,“Name”:“m”,“Explain”:“格式”},{“ID”:“10014”,“Name”:“n”,“Explain”:“搞完然后与”}]

    01

    Unity容器在asp.net mvc中的IOC应用及AOP应用

    《asp.net-mvc框架揭秘》一书中,有个示例,是使用unity容器来注入自定义的控制器工厂。代码示例可以自己去下载源码,在这里我就不说了。IOC容器的本质是解耦的实例化接口类,而如何做到解耦就是通过第三方容器来实例化,在这里是unity容器,而不是在项目中实例化接口类。实例化的方法无非就是反射,Emit,表达式树,委托等四个方法。Unity容器的IOC使用主要是三个个方法:Register,Resolver,Dispose。前者注册接口和接口类,后者将接口类的实例化转移到第三方容器中实现。而这里的Dispose却是有点文章了。如果单单是控制台的应用项目,就不必多说,如果是在mvc框架中的话,我们的接口类的资源释放应该放在什么地方合适呢?微软unity开发小组给我们做了很好的解释,原文:https://msdn.microsoft.com/en-us/library/dn178463(v=pandp.30).aspx 我们将Unity容器里面资源的释放与控制器的资源释放绑定在一起。如何用代码来表示?我们在基于Unity的控制器工厂中的GetControllerInstance中解析controllerType对象,而不是解析某个接口: (IController)this.UnityContainer.Resolve(controllerType); 尽管Unity容器是IOC框架,我们还是可以使用unity来做AOP,可以参考的官方资料:(5 - Interception using Unity)。 我们主要是通过集成ICallHandler接口来实现AOP,这个接口是unity给我们提供的,这个接口主要就是一个Invoke方法。继承自ICallHandler接口的类(TCalHandler),当通过接口(TIOCInterface)开始调用类(TIOCImple)中的方法时,就会开始调用类(TCalHandler)的Invoke方法。 在Invoke中,如果调用getNext()方法就会调用IOCImple标注了属性的方法。如果你的C#基础比较扎实,你对C#中的一个重要知识点-特性(attribute)应该就会有印象以及一定的了解。asp.net-mvc框架中的过滤器就是基于attribute实现的。那么在这里也是,我们需要调用unity给我们提供的一个特性attribute-HandlerAttribute,在这里我们调用我们基于ICallHandler的类。 DI是为了解耦的实例化接口,而AOP是横向的注入一些逻辑,我们可以在AOP里面实现DI,unity中的AOP模块默认会给我们实现DI,一旦我们实现了AOP,就相当于实现了DI。我会挑一些代码片段来解释。代码来自<<asp.net-mvc框架揭秘>>的第14章S1401源码。首先我们实现自己自定义的控制器工厂:

    01
    领券