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

使用.NET反射可以知道方法是否不是set属性,也不是来自基类

使用.NET反射可以通过以下方式判断一个方法是否不是set属性,也不是来自基类:

  1. 获取类型信息:使用反射获取目标类型的Type对象,可以通过typeof关键字或者Type.GetType()方法获取。
  2. 获取方法信息:通过Type对象的GetMethod()方法获取目标方法的MethodInfo对象。可以指定方法的名称、参数类型等来获取特定的方法。
  3. 判断方法是否为set属性方法:通过MethodInfo对象的IsSpecialName属性判断方法是否为特殊名称方法,如属性的get和set方法。如果IsSpecialName为true,则表示该方法是特殊名称方法。
  4. 判断方法是否来自基类:通过MethodInfo对象的DeclaringType属性获取声明该方法的类型。如果DeclaringType与目标类型不同,则表示该方法来自基类。

下面是一个示例代码,演示了如何使用.NET反射判断方法是否不是set属性,也不是来自基类:

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

public class MyClass
{
    public void MyMethod()
    {
        Console.WriteLine("MyMethod");
    }
}

public class MyDerivedClass : MyClass
{
    public new void MyMethod()
    {
        Console.WriteLine("MyDerivedClass.MyMethod");
    }
}

public class Program
{
    public static void Main()
    {
        Type type = typeof(MyDerivedClass);
        MethodInfo methodInfo = type.GetMethod("MyMethod");

        bool isSetPropertyMethod = methodInfo.IsSpecialName && methodInfo.Name.StartsWith("set_");
        bool isFromBaseClass = methodInfo.DeclaringType != type;

        if (!isSetPropertyMethod && !isFromBaseClass)
        {
            Console.WriteLine("The method is neither a set property method nor from the base class.");
        }
        else
        {
            Console.WriteLine("The method is either a set property method or from the base class.");
        }
    }
}

在这个示例中,我们定义了一个基类MyClass和一个派生类MyDerivedClass,它们都有一个名为MyMethod的方法。通过反射获取MyDerivedClass的MyMethod方法的MethodInfo对象,并使用IsSpecialName属性和DeclaringType属性进行判断。最后根据判断结果输出相应的信息。

请注意,这个示例只是演示了如何使用.NET反射判断方法是否不是set属性,也不是来自基类,并不涉及云计算或其他相关领域的内容。

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

相关·内容

.Net中的反射(查看类型信息) - Part.2

可能有字段的类型、字段的名称、字段是否public、字段是否为const、字段是否是read only 等等,那么是不是应该将字段的这些信息封装起来呢?...由于MemberInfo是一个,当我们获得一个MemberInfo后,我们并不知道它是PropertyInfo(封装了属性信息的对象)还是FieldInfo(封装了属性信息的对象),所以,有必要提供一个办法可以让我们加以判断...有的时候,我们可能不希望查看的成员,可能希望查看私有的成员,此时可以使用GetMembers()的重载方法,传入BindingFlags 位标记参数来完成。...,Name属性会在编译后生成Get_Name()和Set_Name()两个方法,那么,应该可以利用反射获取这两个方法。...小结 本文涉及了反射的最基础的内容,我们可以利用反射来自顶向下地查看程序集、模块、类型、类型成员的信息。反射更强大、更有意思的内容:迟绑定方法、动态创建类型以后会再讲到。

49230

来一点反射和Emit,让ORM的使用极度简化

PDF.NET开发框架一直是号称“无需反射”的,因为它的ORM框架(PDF.NET不仅仅是一个ORM框架,详细请见官网)中实体的设计很特别,不需要反射就能够获知映射的字段信息,我们用实际的例子来说明下...("UID", value); }         } UID属性的Get和Set方法很简单,看名字就知道它的功能了。...如果我们将实体先抽象出来一个接口,然后让框架根据该接口,自动继承EntityBase和实现接口的属性方法,那该多好啊! PS:这个想法我已经想了好几年了,但总觉得不是很有必要。...当前功能已经在PDF.NET Ver 4.6.4.0525 版本实现,之前的版本,大家可以去开源项目下载:http://pwmis.codeplex.com 4,动态实体使用约束 这里说的“动态实体...对本方案而言,使用动态实体有以下几点约束: 使用接口(interface)定义实体 实体类属性定义需要get,set 访问器同时存在(否则怎么保存数据到数据库?)

95590

在C++中反射调用.NET(二) 定义数据接口 绑定委托方法 使用SOD DTO 对象 将.NET对象转换到C++结构体为何不使用序列化的问题

反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用反射调用.NET程序集的简单方法,今天我们看看如何在C++...三种类型的属性,所以可以把它当做.NET与C++传递数据的DTO对象接口。...PDF.NET SOD框架中的一个实体构造器,调用CreateEntity方法可以根据一个接口创建一个动态实体对象,通过这种方式,我们可以不用去关心实体的构造细节,仅仅关心方法调用的数据接口。...虽然方法返回的是IUserInfo,但是对于我们的C++程序端来说,它并不知道IUserInfo这个接口对象,因为此接口没有在C++程序端定义,C++程序没用引用它所在的.NET程序集,所以我们在反射调用...实体的一个方法定义: public object PropertyList(string propertyFieldName) 我们反射方法并且绑定一个委托对象来调用它: static

2.9K70

C#中的属性

目录 什么是属性(Attribute) 自定义属性 如何使用属性 限制属性使用范围 如何访问属性 反射访问 总结 这篇文章主要面向的对象是初级开发人员,以及对属性不是很熟悉的开发人员。...属性是放在、字段和方法等定义的前面(上面),用来指定特定内容的。.Net框架中为我们提供了一些常用属性。比如Serializable,它告诉编译器当前可以序列化成JSON或XML。...TIP:属性在编译的时候会嵌入到程序集中。我们可以使用反射来获得属性的值。 自定义属性 当.Net框架提供的属性不足以满足我们开发的要求时,我们可以自定义属性,自定义属性在项目中算比较常用的技术。...就是使用的是CarAttribute的短名称) 限制属性使用范围 属性本身是一个,因此属性可以用其他属性来指定和修饰。...元数据在构建项目时被编译并描述元素而不是元素的数据。我们可以继承Attribute来自定义属性,并使用AttributeUsage属性限制属性使用范围,并通过反射来获取属性数据。

1.8K10

C# 特性(Attribute)之Serializable特性

公共语言运行时 (CLR) 管理对象在内存中的分布,.NET 框架则通过使用反射提供自动的序列化机制。对象序列化后,的名称、程序集以及实例的所有数据成员均被写入存储媒体中。...所有使用此格式化程序序列化的对象使用它进行反序列化,对于序列化将在 .NET 平台上进行反序列化的对象,此格式化程序无疑是一个理想工具。需要注意的是,对对象进行反序列化时并不调用构造函数。...如果从 MyObject 派生出一个新的,则这个新的必须使用属性进行标记,否则将无法序列化。...如果对象实现了 ISerializable,则派生应调用其对象的 GetObjectData 方法。...要还原对象的状态,只需使用序列化时采用的名称,从 SerializationInfo 中检索变量的值。如果实现了 ISerializable,则应调用的构造函数,以使基础对象可以还原其变量。

2.2K100

WPF 属性变动后的业务处理及恢复原始值的方法

阅读本文需要有一定的 WPF 基础(WPF 绑定),如果是刚入门的朋友,可以先看看我以前写的文章《WPF 原生绑定和命令功能使用指南》。...最近在使用 CommunityToolkit.Mvvm 框架时,发现它的绑定里面不知道什么时候添加了 INotifyPropertyChanging 接口的实现(源码为:https://github.com...里面只有一个成员,也就是 PropertyChanging 事件:添加到原来的绑定中也是很容易的(当然您也可以使用现成的框架或库):三、属性变动后的业务处理方法这个其实我之前在做 “Wifi 固定器...其实是可以是最简洁的自动属性的,方法就是使用 PropertyChanged.Fody:然后在需要实现属性变动通知的上面加上 [AddINotifyPropertyChangedInterface]...具体就是,在 PropertyChanging 的方法中,使用反射获取属性值,以属性名作为 key,以属性值作为 value,存储到字典 _originPropertyValueDict 中(这部分代码是固定且通用的

3.3K50

.NETORM框架设计(利用抽象、多态实现无反射的绿色环保ORM框架)

反射的好处当然是毋庸置疑的,一些技术稍微好点的或者大牛们通常会用动态编译的技术来平滑的过度这个系统最重要的性能瓶颈点。我总觉的可以用高层的抽象和约定来解决这个ORM使用反射的问题。...,这个时候只能使用反射的方式获取到属性的值,然后拼接插入或更新语句。...通过抽象、多态设计不需要特性的ORM实体 大部分ORM框架是需要代码生成器做支持的,不是所有的代码都是需要程序员手动去敲的,可以通过一些模板引擎的代码生成器,编辑好自己的模板然后生成大部分的实体代码。...顶层抽象被ORM使用,子类被调用者使用。 图: 我们的要求就是ORM中不能存在一个反射的代码。...所以我们约定了BasicEntityObject抽象,通过定义顶层抽象来包含子类所要用到的一些属性信息。 我们看一下抽象中包含了哪些东西。

74820

ASP.NET Core 奇淫技巧之伪属性注入

最直白的讲,我们在 ASP.NET Core 中,想使用某个类型的时候可以不用自己去 new,可以由容器通过构造方法来注入具体的实现类型,而我们一般在构造方法上定义的依赖类型都是接口,而不是去依赖具体的实现...关于属性注入,如果在网上搜索,大部分内容都是不推荐使用,或者说慎重使用的,因为属性注入会造成类型的依赖关系隐藏,测试不友好等,我同意这种说法,属性注入可以使用,但是要谨慎,不能盲目使用。...今天我分享的方法不是使用替换容器,而是通过几行代码来实现属性注入的效果,我称为“伪属性注入”。...第二条: 在上面的Controller注入 ILogger,然后设置了 Logger 属性,这样子类就可以使用 Logger 属性使用日志。...如果要使用完全的属性注入可以替换使用第三方容器,本文所述旨在不想引入第三方容器,且想在部分地方来达到属性注入的效果,因为属性注入这个东西不推荐大范围使用

85720

夯实Java基础系列12:深入理解Java中的反射机制

所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是JVM在运行时才动态加载或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。...当我们在使用IDE(如Eclipse,IDEA)时,当我们输入一个对象或并想调用它的属性方法时,一按点号,编译器就会自动列出它的属性方法,这里就会用到反射。...一样可以通过.class获取 Class userClass = User.class; JAVA反射机制是在运行状态中,对于任意一个,都能够知道这个的所有属性方法...同时我们可以借助反射中Class对象的isInstance()方法来判断是否为某个的实例,它是一个Native方法: public native boolean isInstance(Object...反射是在运行状态中,对于任意一个,都能够知道这个的所有属性方法;对于任意一个对象,都能够调用它的任意一个方法属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

51510

.Net中的反射(反射特性) - Part.3

.Net中的反射(反射特性) - Part.3 2008-2-17 作者: 张子阳 分类: .Net 框架 反射特性(Attribute) 可能很多人还不了解特性,所以我们先了解一下什么是特性。...但是如果新的SendMsg()不仅优化了参数的传递,并且在算法和效率上进行了全面的优化,那么我们将会迫切希望告知客户程序现在有一个全新的高性能SendMsg()方法可供使用,但此时客户程序并不知道已经存在一个新的....Net内置特性介绍 .Net可以使用特性来完成这一工作。...你是不是要一个一个地去查看源文件,找出这些注释,再一条条插入数据库中呢? 通过上面特性的定义,我们知道特性可以用于给类型添加元数据,这些元数据可以用于描述类型。那么在此处,特性应该会派上用场。...注意ValidOn属性不是一个命名参数,因为它不包含set访问器。 这里大家一定疑惑为什么会这样划分参数,这和特性的使用是相关的。

47020

浅谈.Net反射 5

反射是动态操作元数据的能力,从程序集-模块-类型-字段-属性-方法-参数等,反射可以动态操作这些部分,在编译时不确定,在运行中动态确定,并进行有效控制。...通过上图,可以获得: memoryStream对象的类型, 类型的命名空间, 类型的, 在.NET运行库中的映射类型, 是public、private,还是protected, 是值类型还是引用类型..., 是不是基元类型, 是枚举、、数组,还是接口, 2. memoryStream对象的类型的成员信息 除了类型本身的信息以外,还要进一步知道它的成员信息: a....浏览Type类型的成员,会发现它的属性方法可以大致分为以下几组: a. IsXXXX,比如IsAbstract、IsClass,这组属性返回bool类型,用于说明类型是否具备某些特性。 b....其他的一些属性方法 由于MemberInfo是一个抽象,在获得一个MemberInfo对象后,并不知道它的实际类型是PropertyInfo还是FieldInfo。

32640

C#之反射、元数据详解

特别是属性需要指定: 特性可以应用到那些类型的程序元素上(、结构、属性方法等) 是否可以多次应用到同一个应用程序元素上 在应用到和接口上时,是否由派生和接口继承 这个特性有那些必选和可选参数...一、System.Type Type t=typeof(double);   这里使用Type只为了存储类型的引用,以前把Type看做一个,实际上时一个抽象的。...  Type是实现许多反射功能的入口,它实现了许多方法属性,这里我们将介绍如何使用这个。...这个成员只能在完整的框架中使用   其中还有许多布尔属性表示这种类型是否是一个。还是一个枚举等等。...反射是.NET中的重要机制,通过反射可以在运行时获得程序或程序集中每一个类型(包括、结构、委托、接口和枚举等)的成员和成员的信息。    不是井里没有水,而是你挖的不够深。

1.4K30

C#反射与特性(九):全网最全-解析反射

where T : 类型参数必须是指定的或派生自指定的 where T : 类型参数必须是指定的接口或实现指定的接口。 可指定多个接口约束。 约束接口可以是泛型。...如果一个是静态,那么 IsSealed 和 IsAbstract 都是 true。 Type 中没有判断是否为静态属性方法,但是可以通过上面的方法判断是否为静态。...、属性、字段等,都可以使用特性修饰,我们要通过反射获取特性后,还要将特性结果还原出程序员写代码时设置的值。...抽象、委托等,可以使用同样的方法解析接口,然后接着解析接口的属性方法。...2.4 可空类型 判断一个类型是否为可空类型时,可以先判断是否为泛型。 可空类型和泛型方法可以使用 IsGenericType 属性判断。

1.9K40

Java基础13:反射详解

所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是JVM在运行时才动态加载或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。...当我们在使用IDE(如Eclipse,IDEA)时,当我们输入一个对象或并想调用它的属性方法时,一按点号,编译器就会自动列出它的属性方法,这里就会用到反射。...描述构造器的Constructor等属性 2、对象照镜子后(反射可以得到的信息:某个的数据成员名、方法和构造器、某个到底实现了哪些接口。...同时我们可以借助反射中Class对象的isInstance()方法来判断是否为某个的实例,它是一个Native方法: ==public native boolean isInstance(Object...要获取方法和字段的注解信息,必须通过Java的反射技术来获取 Annotation对象,因为你除此之外没有别的获取注解对象的方法 注解可以没有定义成员, 不过这样注解就没啥用了 PS:自定义注解需要使用到元注解

60330

c#面试题抽象和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想

(2)new修饰符用于隐藏成员的继承成员。   使用修饰符来修改方法属性、索引器或事件。重写方法提供从继承的成员的新实现。由重写声明重写的方法称为重写方法。...实现接口的或结构必须遵守其协定。接口可以包含方法属性、索引器和事件作为成员。   4、请以图示的方式解释.net ?   5、什么是.net?   ....net是一种平台和框架,.net不是单纯的语言不是单纯的工具,它是从底层平台开始构建起来的一个整体框架。   6、ref与out有什么不同?   ...重写主要是在继承中体现,就是在中定义方法并在派生使用新实现重写它们。   13、什么是反射?如何实现反射?   反射提供了访问程序集、模块和类型信息的一种机制。...但是不是说C#不支持指针c#面试题抽象和接口的区别,我们可以使用unsafe关键词,开启不安全代码(unsafe code)开发模式。在不安全模式下,我们可以直接操作内存,这样就可以使用指针了。

1.9K20

【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )

文章目录 总结 一、Android 视图依赖注入步骤 二、Android 布局依赖注入示例 1、创建依赖注入库 2、声明注解 3、Activity 4、依赖注入工具 5、客户端 Activity...三、博客源码 总结 Android 依赖注入的核心就是通过反射获取 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 中 , 获取该注解 以及 注解属性 , 进行相关操作...; ④ 依赖注入逻辑 : 获取 Activity , 并使用反射获取中的所有属性字段 , 获取所有的 @BindBiew 注解 , 如果找到该注解 , 执行 findViewById 获取视图组件对象...// 获取字段上的注解, @BindView 注解 // 注意不是所有的属性字段都有 @BindView 注解 BindView bindView =...Activity 的对应属性字段的值 field.set(activity, view); } catch (IllegalAccessException

68920

C#基础知识回顾-- 反射(1)

反射是一种 功能强大的机制,它允许学习和使用只在运行时才能知道的类型功能。   这些是官方定义,其实说白了,反射就是能知道我们未知类型的类型信息这么一个东西.没什么神秘可讲!...反射的核心是System.Type。System.Type包含了很多属性方法使用这些属性方法可以在运行时得到类型信息。 一旦得到类型信息,就可以调用其构造函数、方法属性。...ParameterInfo定义了大量描述参数信息的属性方法。 其中常用属性是Name和ParameterType,这两个属性我就不介绍了,从字面上应该可以理解了。...请注意,除了MyClass定义的方法外,object定义的方法会被显示。这是因为C#所有的都继承于object。 另外,类型名称(如Int32)采用的是.net结构的名称。...GetMethods()方法的BindingFlages形式的一个主要用途在于,它可以只获得某个自身定义的方法而不 获得它从继承的方法,这对于object尤其有用。

731100

.NET 面试题汇总(带答案)

反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。   ...18.sealed修饰符有什么特点 答:sealed 修饰符可以应用于、实例方法属性。 密封不能被继承;  密封方法会重写中的方法,但其本身不能在任何派生中进一步重写。...同:接口、和结构可从多个接口继承。     接口类似于抽象:继承接口的任何非抽象类型都必须实现接口的所有成员。     接口可以包含事件、索引器、方法属性。...73.List, Set, Map是否继承自Collection接口? 答:List,Set是,Map不是 74.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?...这样分析器就知道不用查找结束标记了。   4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。   5. 在HTML中,可以拥有不带值的属性名。

1.2K30

C#学习笔记 反射

Type对象 要使用反射,首先要获取Type对象。Type对象包含C#对象的各种信息,例如名称,命名空间的名称等等。使用typeof 运算符,可以从一个名获取Type对象。...Type type = i.GetType(); 获得Type对象之后,就可以调用上面的方法属性,来查看有关类型的信息了。注意Type对象查看的的信息,而不是具体绑定到某个对象的信息。...详细情况可以查看MSDN库。 MemberInfo对象 通过MemberInfo对象可以查看有关中成员的信息。其中有大量的方法属性,详情可以参阅MSDN。...其实可以简单的在遍历的时候使用MethodInfo对象的ToString()方法,但是这个方法只会返回方法参数列表的类型名,不会返回参数名。...初看之下貌似没有什么作用,因为利用反射可以做到的事情不用反射照样可以做到。其实,反射的最重要的作用就在于这动态 二字。

34720
领券