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

从类型集合中获取公共基类的最简单方法

从类型集合中获取公共基类的最简单方法是使用 C# 语言中的 typeof 关键字和 Type 类的 GetGenericTypeDefinition() 方法。

首先,需要创建一个泛型类型,该类型具有要检查的类型集合中的所有类型的公共基类。例如,如果要检查 List<int>List<string> 的公共基类,可以创建一个泛型类型 MyList<T>,其中包含要检查的类型的公共基类。

代码语言:csharp
复制
public class MyList<T> : List<T>
{
}

然后,可以使用 typeof 关键字获取 MyList<T> 类型的 Type 对象,并使用 GetGenericTypeDefinition() 方法获取泛型类型定义。

代码语言:csharp
复制
Type myListType = typeof(MyList<>);
Type genericTypeDefinition = myListType.GetGenericTypeDefinition();

现在,可以使用 genericTypeDefinition 变量来获取任何泛型类型的公共基类。例如,可以使用以下代码获取 List<int>List<string> 的公共基类。

代码语言:csharp
复制
Type listOfIntType = typeof(List<int>);
Type listOfStringType = typeof(List<string>);

Type listBaseType1 = genericTypeDefinition.MakeGenericType(listOfIntType.GetGenericArguments());
Type listBaseType2 = genericTypeDefinition.MakeGenericType(listOfStringType.GetGenericArguments());

在这个例子中,listBaseType1listBaseType2 都将是 MyList<T> 类型的 Type 对象,但是它们的泛型参数不同。listBaseType1 的泛型参数是 int,而 listBaseType2 的泛型参数是 string

总之,使用 typeof 关键字和 Type 类的 GetGenericTypeDefinition() 方法可以轻松地获取类型集合中的公共基类。

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

相关·内容

一个简单方法:截取子类名称不包含后缀部分

在代码,我们可能会为了能够一眼看清之间继承(从属)关系而在子类名称后缀带上名称。但是由于这种情况下不参与实际业务,所以对外(文件/网络)名称通常不需要带上这个后缀。...本文提供一个简单方法,让子类后缀删掉,只取得前面的那部分。 在这段代码,我们至少需要获得两个传入参数,一个是名称,一个是子类名称。...但是考虑到让开发者就这样传入两者名称的话会比较容易出问题,因为开发者可能根本就不会按照要求去获取类型名称。所以我们需要自己通过类型对象来获取名称。...33 using System; namespace Walterlv.Utils { /// /// 包含名相关处理方法。.../// internal static class ClassNameUtils { /// /// 当某个类型派生都以

21030

Core官方DI解析(3)-ServiceCallSite.md

Populate(descriptors); } ​ 在Populate方法,首先经过了一系列判断,进行缓存 private void Populate(IEnumerable<ServiceDescriptor...callSiteChain) { // 在_descriptorLookup缓存获取指定所有ServiceDescriptor实例, // 然后利用最后一个...,在这个方法中选择最优构造器并实例化ConstructorCallSite对象, 首先获取实例类型所有公共构造器,如果不存在就抛出异常 如果此类型只有一个构造器,那么就使用此构造器当做最优构造器进行实例化...GetCallSite()获取每一个参数对应ServiceCallSite,在方法可以看到如果GetCallSite()获取到对应实例对象但是该参数具有默认参数,那么就使用默认参数. ​...,由此类型来当类型进行获取注册当前类型所有服务ServiceCallSite var itemType = serviceType.GenericTypeArguments.Single

1.2K10

Core官方DI解析(3)-ServiceCallSite

上一篇说过在整个DI框架IServiceProviderEngine是核心,但是如果直接看IServiceProviderEngine派生其实看不出也没什么东西,因为这个类型其实都是调用其它对象方法...ServiceDescriptorCacheItem Populate(descriptors); } 在\*\*Populate\*\*方法,首先经过了一系列判断,进行缓存 private...,在这个方法中选择最优构造器并实例化`ConstructorCallSite`对象, 首先获取实例类型所有公共构造器,如果不存在就抛出异常 如果此类型只有一个构造器,那么就使用此构造器当做最优构造器进行实例化...\*\*GetCallSite()\*\*获取每一个参数对应`ServiceCallSite`,在方法可以看到如果\*\*GetCallSite()\*\*获取到对应实例对象但是该参数具有默认参数...,由此类型来当类型进行获取注册当前类型所有服务ServiceCallSite var itemType = serviceType.GenericTypeArguments.Single

82420

新生命开发团队Orm框架XCode v3.5.2009.0714源码发布(圣诞随心大礼包)

这种泛型设计方式,让我们能够抽象大量公共操作。当然,面向对象抽象和虚拟也可以抽象,但是我们这里通过泛型,还可以抽象静态方法实现,这也是我们大量使用泛型原因。    ...字句,ToString时自动分割到正确位置 * 实体增加静态方法FindByKeyForEdit,用于替代模版生成FindByKeyForEdit,为将要实现表单...NewLife.Core,部分公共库移植到NewLife.Core * 修正EntityTreeFindChilds错误,增加排序字段支持,如果指定排序字段,查询子级时候讲按排序字段降序排序...GetExtend方法用于获取扩展属性,向依赖实体注册数据更改事件 * (重要更新)实体树升级为实体树,所有具有树形结构数据实体,继承自该类,享受树形实体各种功能...IEntityOperate接口增加Create方法,提供创建被类型实体对象功能 * * v5.1.2010.0709 增加实体接口、实体操作接口、实体,提供弱类型Orm支持

1.6K70

.NET Framework 框架一些简单介绍

【定义了一组丰富内置类型,以及每种类新固有的、独有的特性;最重要特征之一是所有类型都继承自公共Object】 2)CLS(Common Language Specification,公共语言规范...【GC自动内存删除程序不在访问对象】 4)互操作性。...5)简化部署。【.NET程序不需要使用注册表注册;并行执行特性】 6)类型安全性。【CLR检查并确保参数及其它数据对类型安全】 7)库(Base Class Library,库)。...有时称为框架库(Framework Class Library,FCL)。【包括通用基础集合、线程和同步、XML】 CLR在运行期管理程序执行,包括以下内容: 1)内存管理。...【用于处理系统和应用程序所引发各种异常】 9)类型反射。【用于获取程序集、对象、方法属性、字段等目标的元数据信息类型】 10)用于应用程序管理、操作系统功能封装、安全性控制等其他方面的类型

1.2K40

你必须掌握 21 个 Java 核心技术!

->子类, 处理定义处初始化, 执行构造方法 需要注意点: 静态属性等->子类进行初始化 默认无参构造方法相关特性   5....,单继承 抽象,抽象,接口 多态:方法覆盖概念和使用 接口回调 8. static 静态属性在java日常开发也是经常使用,需要了解和 static 关键字相关用法,还有和其他关键字配合使用...这里包括了如下内容(并发相关不包含在内): 集合框架体系: 基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具...在多线程内容有很多,只是简单说明一下Java初步使用多线程需要掌握知识点,以后有机会单独再详细介绍一些高级特性使用场景。在Java技术栈公众号回复"多线程"可获取多线程系列教程。...但是开发一些基础公共组件会使用到,可以在需要时候再细看这个部分,一般情况下只要会简单使用即可。 19. 注解 也是jdk5 之后引入,元注解你必须了解。

49710

Java开发必须掌握 21 个 Java 核心技术!

->子类, 处理定义处初始化, 执行构造方法 需要注意点: 静态属性等->子类进行初始化 默认无参构造方法相关特性 5....,单继承 抽象,抽象,接口 多态:方法覆盖概念和使用 接口回调 8. static 静态属性在java日常开发也是经常使用,需要了解和 static 关键字相关用法,还有和其他关键字配合使用...这里包括了如下内容(并发相关不包含在内): 集合框架体系: 基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具...在多线程内容有很多,只是简单说明一下Java初步使用多线程需要掌握知识点,以后有机会单独再详细介绍一些高级特性使用场景。在Java技术栈公众号回复"多线程"可获取多线程系列教程。...但是开发一些基础公共组件会使用到,可以在需要时候再细看这个部分,一般情况下只要会简单使用即可。 注解 也是jdk5 之后引入,元注解你必须了解。

1.7K00

Java开发必须掌握 21 个 Java 核心技术!

->子类, 处理定义处初始化, 执行构造方法 需要注意点: 静态属性等->子类进行初始化 默认无参构造方法相关特性 5....,单继承 抽象,抽象,接口 多态:方法覆盖概念和使用 接口回调 8. static 静态属性在java日常开发也是经常使用,需要了解和 static 关键字相关用法,还有和其他关键字配合使用...这里包括了如下内容(并发相关不包含在内): 集合框架体系: 基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具...在多线程内容有很多,只是简单说明一下Java初步使用多线程需要掌握知识点,以后有机会单独再详细介绍一些高级特性使用场景。在Java技术栈公众号回复"多线程"可获取多线程系列教程。...但是开发一些基础公共组件会使用到,可以在需要时候再细看这个部分,一般情况下只要会简单使用即可。 注解 也是jdk5 之后引入,元注解你必须了解。

53740

你必须掌握 21 个 Java 核心技术!(干货)

->子类, 处理定义处初始化, 执行构造方法 需要注意点: 静态属性等->子类进行初始化 默认无参构造方法相关特性   5....,单继承 抽象,抽象,接口 多态:方法覆盖概念和使用 接口回调 8. static 静态属性在java日常开发也是经常使用,需要了解和 static 关键字相关用法,还有和其他关键字配合使用...这里包括了如下内容(并发相关不包含在内): 集合框架体系:基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具...在多线程内容有很多,只是简单说明一下Java初步使用多线程需要掌握知识点,以后有机会单独再详细介绍一些高级特性使用场景。在Java技术栈公众号回复"多线程"可获取多线程系列教程。...但是开发一些基础公共组件会使用到,可以在需要时候再细看这个部分,一般情况下只要会简单使用即可。 19. 注解 也是jdk5 之后引入,元注解你必须了解。

52210

C# 特性 System.ComponentModel 命名空间属性方法大全,System.ComponentModel 命名空间特性

AmbientValueAttribute 指定要传递给属性值,以使该属性另一个源获取其值。 这称为“环境”。 此类不能被继承。...GroupDescription 为描述如何将集合项划分为组类型提供抽象。 GuidConverter 提供将 Guid 对象与其他各种表示形式相互转换类型转换器。...InstallerTypeAttribute 为安装组件类型指定安装程序。 InstanceCreationEditor  PropertyGrid 下拉框创建特定类型属性实例。...EditorBrowsableState 编辑器内指定属性或方法可浏览状态。 InheritanceLevel 定义继承级别类型标识符。...CollectionChangeEventHandler 表示处理将元素添加到集合集合移除元素时引发 CollectionChanged 事件方法

3.9K30

知识总结:Java21个技术点

无继承:分配内存空间, 初始化变量, 调用构造函数;2.有继承:处理静态动作, 分配内存空间, 变量定义为初始值 , ->子类, 处理定义处初始化, 执行构造方法; 需要注意点:静态属性等...,抽象,接口 多态:方法覆盖概念和使用 接口回调 8、Static 静态属性在java日常开发也是经常使用,需要了解和 static 关键字相关用法,还有和其他关键字配合使用,    如是否可以和...这里包括了如下内容(并发相关不包含在内): 集合框架体系: 基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具...区别, 具体处理方法等 12、Java IO IO 在java不仅仅是文件读写那么简单,也包括了 socket 网络读写等等一切输入输出操作。...18、泛型 这是JDK5开始引入新概念,其实是个语法糖,在编写java代码时会有些许便利,    一般应用或者是业务开发,只需要简单使用,不一定会用到定义泛型这样操作, 但是开发一些基础公共组件会使用到

1.1K80

Java21个技术点,你知道吗?

无继承:分配内存空间, 初始化变量, 调用构造函数;2.有继承:处理静态动作, 分配内存空间, 变量定义为初始值 , ->子类, 处理定义处初始化, 执行构造方法; 需要注意点:静态属性等...主要知识点包括有: 面向对象三大特性:封装,继承,多态; 各自定义概念,有哪些特性体现出 来,各自使用场景 静态多分派,动态单分派概念 重载概念和使用 继承:接口多实现,单继承 抽象,抽象...这里包括了如下内容(并发相关不包含在内): 集合框架体系: 基础Collection ,Map 具体集合实现内容, List ,Set ,Map 具体实现,内部结构, 特殊方法, 适用场景等 集合相关工具..., 具体处理方法等 12Java IO IO 在java不仅仅是文件读写那么简单,也包括了 socket 网络读写等等一切输入输出操作。...18泛型 这是JDK5开始引入新概念,其实是个语法糖,在编写java代码时会有些许便利, 一般应用或者是业务开发,只需要简单使用,不一定会用到定义泛型这样操作, 但是开发一些基础公共组件会使用到

42030

Python-面向对象

class Person: pass 面向对象技术简介 (Class): 用来描述具有相同属性和方法对象集合。它定义了该集合每个对象所共有的属性和方法。对象是实例。...Python提供了面向对象编程所有基本功能:继承机制允许多个,派生可以覆盖任何方法方法可以调用同名方法。 对象可以包含任意数量和类型数据。...继承语法 class 派生名(名) ... 在python中继承一些特点: 1、如果在子类需要父构造方法就需要显式调用父构造方法,或者不重写父构造方法。...区别在于调用普通函数时并不需要带上 self 参数 3、Python 总是首先查找对应类型方法,如果它不能在派生中找到对应方法,它才开始到逐个查找。...(先在本类查找调用方法,找不到才去找)。 多态 多态,是指一个实例相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构对象可以共享相同外部接口。

46130

SQL Server 多表数据增量获取和发布 4

核心代码分析 关键在于获取捕获表信息(系统表中间_CT结尾数据)。 根据网上资料查取,找到了获取当前捕获表时间区间范围内数据方式。...Age { get; set; } } ---- 实体结构完毕后我们开始考虑获取数据业务逻辑,根据业务我们可以假设获取数据方法几乎相同,不同地方就是返回数据实体集合不同,那我们通过何种方法来完成逻辑有效封装...经过思考,我构想出了一种方法 1、定义一个抽象,在其中定义公共业务逻辑(GetDate)方法,然后定义一个抽象方法,抽象方法需要被子类继承,而子类需要做就是覆写父GetData方法,唯一需要修改就是传递实体...——可以采用泛型变量形式去实现 2、等所有的子类构建完成以后,创建一个简单工厂,传递需要参数,然后根据参数唯一标识符,实例化对应操作去执行公共方法。...根据表名作为唯一标识符字段,创建***CT服务,然后因为他们继承并覆写了父抽象方法Work,所以调用.Work方法即可实现获取数据并插入队列功能。

75620

Python入门之面向对象

相关概念 (Class): 用来描述具有相同属性和方法对象集合。它定义了该集合每个对象所共有的属性和方法。对象是实例。类似对象抽象。 方法定义函数。...(成员函数) 变量:变量在整个实例化对象是公用变量定义在且在函数体之外。变量通常不作为实例变量使用。 实例变量:定义在方法变量,只作用于当前实例。...继承:即一个派生(derived class)继承(base class)字段和方法。继承也允许把一个派生对象作为一个对象对待。...(创建对象) 对象:通过定义数据结构实例。对象包括两个数据成员(变量和实例变量)和方法。 注:继承机制允许多个,派生可以覆盖任何方法方法可以调用同名方法。...公共方法里面定义普通函数,实例化对象可以访问公共方法,不能访问私有方法 私有方法 __private_method:两个下划线开头,声明该方法为私有方法,只能在内部调用 ,不能在地外部调用

9310

美团二面:详细说说Kafka拉消息过程?

很多请求类型数据都是按分区层级分组,因此源码很自然地在这些请求创建同名嵌套。所以,注意区分PartitionData嵌套是定义在哪请求!...最重要processPartitionData,用于处理读取回来消息集合。它是个抽象方法,因此需子类实现它逻辑。...Kafka任何类型消息读取,都是通过给指定Broker发送FetchRequest请求来完成。 doWork 串联前面3个方法主要入口方法。...AbstractFetcherThread作为拉取线程公共,AbstractFetcherThread定义了很多重要方法。 AbstractFetcherThread:拉取线程抽象。...它定义了公共方法处理所有拉取线程共同逻辑,如执行截断操作,获取消息。 拉取线程逻辑:循环执行截断操作和获取数据操作。 分区读取状态:当前,源码定义了3分区读取状态。

55230

解决单例模式懒汉式不支持高并发,饿汉式不支持懒加载问题简单方法——基于枚举类型单例实现

一、前言 解决单例模式懒汉式不支持高并发,饿汉式不支持懒加载问题,确实很多小编也是写过---> DCL(Double Check Lock双重检锁机制)解决单例模式懒汉式不支持高并发,饿汉式不支持懒加载问题...instance = new Single(); } public Single getInstance() { return instance; } } - 测试...剩余手机数量"+"-----"+reduce); }, String.valueOf(i)).start(); } } } - 测试结果 三、总结 简单实现方式...,基于枚举类型单例实现。...这种实现方式通过 Java 枚举类型本身特性,保证了实例创建线程安全性和实例唯一性。比较推荐使用 Q.E.D.

32910

Entity Framework Repository模式

Repository模式之前 如果我们用原始EF进行设计对每个实体“C(增加)、R(读取)、U(修改)、D(删除)”这四个操作。...第一个:先来看看查询,对于实体简单查询操作,每次都是这样过程会在代码拥有大量重复 极为类似的代码段。...那么基于Rspository模式,数据访问层无非就是对数据进行增删改查,其中增、删、改等我们可以抽象出来写一个公共接口或抽象来定义这些方法,并采用一个实现这些方法,这样该派生子类都会继承增... BaseEntity定义了所有参加数据操作实体公共属性,因此我们把该类定义为抽象,作为派生。...4.Repository模式基于接口抽象EFRepositoryBase 我们用一个抽象EFRepositoryBase来实现接口中方法,这样派生都具有接口中定义方法,也防止EFRepositoryBase

1.1K10

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

二、INotifyPropertyChanging之前定义绑定时候,大家都是只关注 INotifyPropertyChanged 这个接口,也就是只会在绑定添加 PropertyChanged...里面也只有一个成员,也就是 PropertyChanging 事件:添加到原来绑定也是很容易(当然您也可以使用现成框架或库):三、属性变动后业务处理方法这个其实我之前在做 “Wifi 固定器...”(《Windows 小工具之 Wifi 固定器》)时已经用过了,当时用了两种方法:3.1、方式一在绑定中直接订阅 PropertyChanged 事件,不过处理方法是一个空方法,方便在子类重写...3.2、方式二还是以 “Wifi 固定器” 代码为例:也就是直接给需要对象 PropertyChanged 事件附加处理方法方法具体代码和方式一类似),当然,这个对象类型也必须是直接或间接实现了...[ImplementPropertyChanging] 特性:由于 Fody ImplementPropertyChanging 未成功,所以相关还是改为 普通属性 绑定 形式:五、效果演示先简单看下模拟业务处理代码

3.3K50
领券