关键词:
【中文标题】从非泛型类调用抽象泛型类中定义的方法的最佳方法是啥【英文标题】:What is the best way to call a method defined inside an abstract generic class from a non generic class从非泛型类调用抽象泛型类中定义的方法的最佳方法是什么 【发布时间】:2021-09-14 18:53:48 【问题描述】:我不想让B类泛型,因为有很多类继承自B类。如何在非泛型类中使用泛型类“classA”的方法“GetSomeData”?
这是我的代码:
public abstract class classA<T> : IInterface<T>
where T : new()
public String GetSomeData (Guid ID)
return somestring;
public abstract class ClassB : InterfaceB
//Use GetSomeData(Guid ID) here
在 B 类中调用 GetSomeData 的最佳方法是什么?
【问题讨论】:
非常不清楚这两种类型如何相互关联。您想要实现但无法编译的代码示例会很有帮助。 【参考方案1】:首先,您的代码本身看起来并不干净。未满足 C# 编码约定,并且并非所有使用的组件都存在。
但要回答您的问题,您需要在使用泛型方法/类之前指定具体类型 T。
例如,工作代码可能如下所示:
public abstract class GenericParent<T>
where T : new()
public string GetSomeData(Guid id) => string.Empty;
// Non abstract type, to create be able to create an instance
public class GenericChild<T> : GenericParent<T> where T : new()
public abstract class ClassB
public void DoSomething()
// Creating instance of a generic type, specifying concrete T (in this case of type SomeClass)
var instance = new GenericChild<SomeClass>();
instance.GetSomeData(Guid.Empty);
// An example of type, that meets the "where" condition of T in the generic type
public class SomeClass
【讨论】:
【参考方案2】:根据 OOP 原则,抽象类不能被实例化。 他们只能被继承。有几种方法可以访问 Abstract 类中的实例变量和方法,如下所示。
-
创建一个继承抽象类的子类;创建一个子类对象并访问所有实例变量和方法。
public abstract class classA<T> : IInterface<T>
where T : ITask, new()
public String GetSomeData (Guid ID)
return somestring;
public class ChildOfClassA : ClassA<SomeType_of_Type_ITask>
public abstract class ClassB : InterfaceB
//Use GetSomeData(Guid ID) here
ChildOfClassA obj = new ChildOfClassA();
string result = obj.GetSomeData(Guid.NewGuid());
-
如果该方法与类的实例没有紧密耦合,则将该方法设为静态。然后您可以将其与
ClassName.MethodName
一起使用
public abstract class classA<T> : IInterface<T>
where T : ITask, new()
public **static** String GetSomeData (Guid ID)
return somestring;
public abstract class ClassB : InterfaceB
//Use GetSomeData(Guid ID) here
string result = classA.GetSomeData(Guid.NewGuid());
-
你可以在你想使用的类中继承这个Abstract类,直接通过
base.MethodName
或者MethodName
直接访问。
public abstract class classA<T> : IInterface<T>
where T : ITask, new()
public string GetSomeData (Guid ID)
return somestring;
public abstract class ClassB : ClassA<SomeType_of_Type_ITask>, InterfaceB
//Use GetSomeData(Guid ID) here
string result = [base.]GetSomeData(Guid.NewGuid()); //[base.] is optional even you can override this function or overload it.
在情况 1 和 3 中,您必须传递泛型参数才能继承抽象类,因为在您的情况下,抽象类接受泛型参数。
【讨论】:
泛型方法或泛型类中的方法是内部调用pinvoke或是在com导入类中定义的。
泛型基类中引用Api函数定义时staticextern,在子类中会提示:未处理TypeLoadException泛型方法或泛型类中的方法是内部调用、PInvoke或是在COM导入类中定义的。解决方法:将定义Api函数封装到独立的类中即可publicclassGenericClass1<T>&nb... 查看详情
泛型类中的方法重载
】泛型类中的方法重载【英文标题】:Methodoverloadingingenericclass【发布时间】:2012-06-0502:51:26【问题描述】:我正在使用包含以下泛型类中的重载方法的代码:publicclassA<T>publicvoidProcess(Titem)/*impl*/publicvoidProcess(stringitem)/*impl*/... 查看详情
java——泛型类和泛型方法(静态方法泛型)
泛型类定义的泛型,在整个类中有效。如果被方法是用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。为了让不同的方法可以操作不同类型,而且类型还不确定。那么可以将泛型... 查看详情
201671010112第十周
...别重要吧,后续不懂的我都是在网上找资源。关于第八章泛型程序设计一、定义简单的泛型类泛型类:是具有一个或多个类型变量的类。类定义中的类型变量指定方法的返回类型以及域和局部变量的类型。二、泛型方法泛型方法... 查看详情
spring自定义泛型类中autowired注入为null
...单独拉出来写一个方法的话,入参又不同,所以想到了用泛型。比如这是一段公共代码://保存订单信息,需要多个方法调用OrderFilterRequest orderFilterRequest = new OrderFilterRequest();btOrderFilterRequest.setUserI 查看详情
泛型类中的静态方法?
】泛型类中的静态方法?【英文标题】:Staticmethodinagenericclass?【发布时间】:2010-10-3011:58:51【问题描述】:在Java中,我想要一些东西:classClazz<T>staticvoiddoIt(Tobject)//...但我明白了无法对非静态类型T进行静态引用除了基本用... 查看详情
泛型和枚举
泛型:用于解决安全问题,是一个安全机制.泛型格式;通过<>定义操作的引用数据类型。使用:当类中要操作的引用数据类型不确定的时候,早起定义Object来完成扩展,现在定义泛型类来扩展。泛型类定义的泛型,在整个类... 查看详情
泛型类的可选方法参数的类型
】泛型类的可选方法参数的类型【英文标题】:TypeforOptionalMethodArgumentofGenericClass【发布时间】:2021-08-0322:01:32【问题描述】:我想知道是否有一种方法可以声明具有默认泛型类型的泛型类:默认情况下允许在不传递参数的情况... 查看详情
泛型类,用克隆调用泛型类
】泛型类,用克隆调用泛型类【英文标题】:Genericclass,callinggenericclasswithclone【发布时间】:2018-03-2612:09:53【问题描述】:我需要用实现cloneable来创建一个泛型类,为此我需要执行该类的克隆方法和另一个方法来获取此方法。老... 查看详情
在 kotlin 中创建泛型类的新实例的正确方法是啥?
】在kotlin中创建泛型类的新实例的正确方法是啥?【英文标题】:Whatistheproperwaytocreatenewinstanceofgenericclassinkotlin?在kotlin中创建泛型类的新实例的正确方法是什么?【发布时间】:2014-11-1810:29:55【问题描述】:我使用以下初始化:... 查看详情
java泛型_泛型类接口通配符方法上下边界(代码片段)
文章目录①.泛型的概述②.泛型-类class③.泛型-接口④.泛型-通配符?⑤.泛型-方法⑥.泛型上下边界①.泛型的概述①.泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类... 查看详情
iPhone - 在泛型类中引用应用程序委托
】iPhone-在泛型类中引用应用程序委托【英文标题】:iPhone-Referencingtheapplicationdelegatewithinagenericclass【发布时间】:2011-07-3013:29:31【问题描述】:我正在编写一个可以通过链接在不同项目中使用的通用类。在某个时刻,我在一个监... 查看详情
泛型类方法的Typescript ReturnType问题
】泛型类方法的TypescriptReturnType问题【英文标题】:TypescriptReturnTypeproblemforgenericclassmethod【发布时间】:2022-01-1901:17:24【问题描述】:我正在使用打字稿:4.3.5我有一个抽象类:abstractclassParentpublicget<Type>(id:number):Observable<Ty... 查看详情
泛型学习笔记
...数化类型。使程序具有更好的可读性和安全性。优点:(泛型类,比如用于集合等容器类型时)1.编译器进行类型检查,避免插入错误类型的对象;2.输出时不需要类型的强制转换。 1.泛型类可以有多个类型变量。例:publiccla... 查看详情
java泛型泛型简介(泛型类|泛型方法|静态方法的泛型|泛型类与泛型方法完整示例)(代码片段)
文章目录一、泛型简介二、泛型类三、泛型方法四、静态方法的泛型五、泛型类与泛型方法完整示例一、泛型简介泛型可以简单理解为参数化类型,主要作用在类,方法,接口上;java泛型与C++模板:Java中的泛型,是仿照C++中... 查看详情
泛型类中的 T.class 等价物是啥? [复制]
】泛型类中的T.class等价物是啥?[复制]【英文标题】:What\'stheequivalentofT.classinagenericclass?[duplicate]泛型类中的T.class等价物是什么?[复制]【发布时间】:2018-01-1112:52:28【问题描述】:考虑以下通用转换器类(为简洁而简化/不完整... 查看详情
普通类、泛型类是啥
如题“泛型”,在英文版原文里写的是:generictype,直译就是:通用类型。generic这个单词里一点儿“泛”的意思可都没有啊!也不知是哪位大神整出“泛”型这么个概念的?!MSDN里最能说明它的一段话是这么写的:Fromthepointofvie... 查看详情
普通类、泛型类是啥
参考技术A“泛型”,在英文版原文里写的是:generictype,直译就是:通用类型。generic这个单词里一点儿“泛”的意思可都没有啊!也不知是哪位大神整出“泛”型这么个概念的?!MSDN里最能说明它的一段话是这么写的:Fromthepoi... 查看详情